【发布时间】:2015-02-24 16:06:50
【问题描述】:
从这两天开始,我真的很疯狂。如果有人能给我一个提示,我将不胜感激。我绝对不明白为什么这个 PHP 代码:
$arr [] = [ "name" => "Chapter 1" ];
$arr [] = [ "name" => "Chapter 2" ];
foreach ( $arr as &$item )
echo $item['name']."<br>";
echo "============<br>";
foreach ( $arr as $item )
echo $item['name']."<br>";
给出这个输出:
Chapter 1
Chapter 2
============
Chapter 1
Chapter 1 (I would expect 'Chapter 2' here)
看起来第一个循环修改了数组,即使循环中没有赋值。奇怪的是,当我删除 & 符号时,一切都按预期工作。
我不明白的是,为什么数组会被修改,即使我没有对引用变量 '&$item' 变量做任何事情(除了回显它)。
我还尝试了循环之间的 reset()。但它并没有改变任何东西,根据手册,在这种情况下无论如何都不需要(至少根据我的理解),因为循环是一个接一个地开始的,并且不会以某种方式嵌套。
非常感谢!
伯纳德
【问题讨论】:
-
从第一个 foreach 中的 &$item 中删除 "&" :-)
-
在第一个循环之后立即添加
unset($item)。 -
是的,这将是最简单的方法:-)。但是上面的 sn-p 只是我为了显示基本问题而剥离的一段代码。我无法删除它的原因是,在实际代码中,我确实需要从循环中修改数组。当然,'for' - 循环也可以很好地工作,但我不喜欢仅仅因为我不了解最初的问题而构建变通方法。
标签: php arrays loops foreach reference