0

可能重复:
foreach 的
奇怪行为 循环引用后的奇怪行为 - 这是 PHP 错误吗?

我确实对 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"
  } 
4

2 回答 2

2

文档

即使在 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);
?>
于 2012-07-25T19:17:14.027 回答
0

在第一个 foreach 中,您使用带有 '&' 符号的引用,因此实际上修改了值。我不知道第一个 foreach 里面是什么,但你正在覆盖旧值,这就是为什么你的第二个 foreach 值与开始时不同的原因。

编辑这篇文章中有一个简洁的答案,或者只是按照建议使用 unset

于 2012-07-25T19:16:04.793 回答