目次

連想配列の場合

name_1 から name_5 の 5 つの値を例に考えてみましょう。

name_1 や name_2 には数値が入り、0 で初期化しておきたいと仮定します。

name_1 => 0;
name_2 => 0;
name_3 => 0;
name_4 => 0;
name_5 => 0;

連想配列のループならキー名さえ動的に扱えればいいので以下のように定義できます。

$list = [];
for ($i = 1; $i <= 5; $i++) {
  $list['name_' . $i] = 0;
}

$list = [];
for ($i = 1; $i <= 5; $i++) {
  $list["name_$i"] = 0;
}

$list = [];
for ($i = 1; $i <= 5; $i++) {
  $list["name_{$i}"] = 0;
}

キーの定義の仕方は人それぞれなので、自分のお気に入りの書き方か、プロジェクトの既存ソースに合わせておくといいでしょう。

結果はいずれも下の通りです。

Array
(
  [name_1] => 0
  [name_2] => 0
  [name_3] => 0
  [name_4] => 0
  [name_5] => 0
)

StdClassの場合

StdClass の場合も以下のようにできるかな?やってみます。

$list = new StdClass;
for ($i = 1; $i <= 5; $i++) {
  $list->name_{$i} = 0;
}

これだと下のような結果になってしまいます。

stdClass Object
(
  [name_] => Array
    (
      [1] => 0
      [2] => 0
      [3] => 0
      [4] => 0
      [5] => 0
    )
)

StdClass の場合はプロパティ全体を {} で囲む必要があります。

$list = new StdClass;
for ($i = 1; $i <= 5; $i++) {
  $list->{'name_' . $i} = 0;
}

このように定義すれば思った通りの結果になります。

stdClass Object
(
  [name_1] => 0
  [name_2] => 0
  [name_3] => 0
  [name_4] => 0
  [name_5] => 0
)

Tips記事一覧

新着記事一覧です。

関連記事一覧

「PHPのStdClassで動的のプロパティ名を扱う」に関連した記事一覧です。

TOP