繁体   English   中英

修改数组后奇怪的foreach循环

[英]Strange foreach loop after modifying array

当我写一些代码时,PHP让我感到困惑,因为我没想到以下代码的结果:

$data = array(array('test' => 'one'), array('test' => 'two'));

foreach($data as &$entry) {
    $entry['test'] .= '+';
}

foreach($data as $entry) {
    echo $entry['test']."\n";
}

我认为它应该输出

one+
two+

但结果是: http//ideone.com/e5tCsi

one+
one+

任何人都可以向我解释原因吗?

这是预期的行为,另请参阅https://bugs.php.net/bug.php?id=29992

使用第二个foreach时保持引用,因此当使用第二个foreach时, $entry的值仍然指向$data[1] ,将被第一个值覆盖。

Ps(感谢@billyonecan说的):你需要先unset($entry) ,这样你的引用才会被销毁。

这在foreach文档中有具体提及。 当通过引用获取数组的元素时,应该unset循环变量。

警告

即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。 建议通过unset()销毁它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM