可能重复:
Strange behavior Of foreach
Strange behaviour after loop by reference - Is this a PHP bug?
我确实遇到了Foreach的问题,我无法理解第二个foreach。
为什么$ foo数组的第三部分的值为'2'!
据我们所知,如果我们删除'&'(在第一个foreach中)问题将解决,但为什么?
<?php
$foo = array('one', 'two', 'three');
foreach ($foo as &$bar)
{
// no-op
}
var_dump($foo);
foreach ($foo as $bar)
{
// no-op
}
var_dump($foo);
?>
###############################################
产生
array(3) {
[0]=>string(3) "one"
[1]=>string(3) "two"
[2]=>&string(5) "three"
}
array(3) {
[0]=>string(3) "one"
[1]=>string(3) "two"
[2]=>&string(3) "two"
}
答案 0 :(得分:1)
来自the docs:
即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。建议通过unset()来销毁它。
所以在你的情况下:
<?php
$foo = array('one', 'two', 'three');
foreach ($foo as &$bar)
{
// no-op
}
var_dump($foo);
unset($bar);
foreach ($foo as $bar)
{
// no-op
}
var_dump($foo);
?>
答案 1 :(得分:0)
在第一个foreach中,你使用了'&amp;'的引用符号,因此实际修改了值。我不知道它在第一个foreach里面是什么,但你覆盖了旧的值,这就是为什么你的第二个foreach值与开头的值不同。
修改在post中有一个简洁的答案,或者只是按照建议使用未设置