loops - PHPforeach 応用 - PHPの「foreach」は実際にどのように動作するのでしょうか?

PHP foreach / php / foreach / iteration / php-internals

foreach とは何か、実行すること、およびその使用方法を知っていると言って、これに接頭辞を付けましょう。この質問は、ボンネットの下でどのように機能するかに関するものであり、「これが foreach で配列をループする方法です」という行に沿った回答は必要ありません。

その意味を示してみましょう。以下のテストケースでは、次のような配列を扱うことになります。

$array = array(1, 2, 3, 4, 5);

テストケース1

foreach ($array as $item) {
  echo "$item\n";
  $array[] = $item;
}
print_r($array);

/ *ループ内の出力:1 2 3 4 5 $ array after loop:1 2 3 4 5 1 2 3 4 5 * /

テストケース2

foreach ($array as $key => $item) {
  $array[$key + 1] = $item + 2;
  echo "$item\n";
}

print_r($array);

/ *ループ内の出力:1 2 3 4 5 $ array after loop:1 3 4 5 6 7 * /

テストケース3

//配列ポインタを1つに移動して、ループに影響を与えないようにします
var_dump(each($array));

foreach ($array as $item) {
  echo "$item\n";
}

var_dump(each($array));

/ *出力array(4){[1] => int(1)["value"] => int(1)[0] => int(0)["key"] => int(0)} 1 2 3 4 5 bool(false)* /

テストケース4

foreach ($array as $key => $item) {
  echo "$item\n";
  each($array);
}

/ *出力:1 2 3 4 5 * /

テストケース5

foreach ($array as $key => $item) {
  echo "$item\n";
  reset($array);
}

/ *出力:1 2 3 4 5 * /

sergiol



Answer #1

つまり、最初の例のように

$array = ['foo'=>1];
foreach($array as $k=>&$v)
{
   $array['bar']=2;
   echo($v);
}

しかし、2番目の例では

$array = ['foo'=>1, 'bar'=>2];
foreach($array as $k=>&$v)
{
   $array['baz']=3;
   echo($v);
}