【发布时间】:2012-07-24 07:24:34
【问题描述】:
可能重复:
Strange behavior Of foreach
Strange behaviour after loop by reference - Is this a PHP bug?
我确实对 Foreach 有问题,我无法理解第二个 foreach。
为什么 $foo 数组的第三部分的值是 'two'!
据我们所知,如果我们删除 '&'(在第一个 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"
}
【问题讨论】:
-
第二个 foreach 基本上是:
foreach ($foo as $foo[2])。所以每次迭代,你都在用当前元素更新 $foo 的最后一个元素。而且由于最后一个元素丢失了,你最终会在最后一个位置上获得倒数第二个。