此代码产生意外的输出:
$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
(e
)的第四个元素。
之后,迭代数组并将第四个元素更改为当前元素。因此,在第二个循环的第一次迭代之后,它将是
abcda
,等等到 abcdd
。在最后一次迭代中,您将第 4 个元素更改为第 4 个元素,如 d
更改为 d
第一个循环之后你应该做
unset($item)
;只要您不再需要引用变量,就取消设置它是一种常见的做法,以防止此类混淆。