php-internals - PHP foreach - PHP的'foreach'究竟是如何工作的?

PHP for loop / php / loops / foreach / iteration

首先,我要说一下我知道 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 $循环后数组: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 $循环后数组:1 3 4 5 6 7 * /

测试用例3

//将数组指针移到一个以确保它不会影响循环
var_dump(each($array));

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

var_dump(each($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);
}

但在你的第二个例子中。

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