预告和参考

时间:2012-07-25 19:13:42

标签: php reference foreach

  

可能重复:
  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"
  } 

2 个答案:

答案 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中有一个简洁的答案,或者只是按照建议使用未设置