此代码产生意外输出:
$array=str_split("abcde");
foreach($array as &$item)
echo $item;
echo "\n";
foreach($array as $item)
echo $item;
输出:
abcde
abcdd
如果在第二个循环中使用 &$item
一切正常。
我不明白这段代码会如何影响$array
的内容。我可以认为隐式 unset($header)
会删除最后一行,但是双 dd
来自哪里?
最佳答案
这可以帮助:
$array=str_split("abcde");
foreach($array as &$item)
echo $item;
var_dump($array);
echo "\n";
foreach($array as $item) {
var_dump($array);
echo $item;
}
正如您在最后一次迭代后看到的那样,$item
引用了 $array
的第 4 个元素 (e
)。
之后,您遍历数组并将第 4 个元素更改为当前元素。因此,在第二个循环的第一次迭代之后,它将是 abcda
,等等到 abcdd
。在最后一次迭代中,您将第 4 个元素更改为第 4 个,如 d
更改为 d
关于PHP foreach 语句引用 : unexpected behaviour when reusing iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287970/