此代码产生意外输出:
$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
来自哪里?
答案 0 :(得分:12)
这可能有所帮助:
$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
(e
)的第4个元素。
之后,您遍历数组并将第4个元素更改为当前元素。因此,在第二次循环的第一次迭代之后,它将abcda
等等abcdd
。在最后一次迭代中,您将第4个元素更改为第4个元素,将d
更改为d