看看这段代码,并帮助我理解结果
$x = array('hello', 'beautiful', 'world');
$y = array('bye bye','world', 'harsh');
foreach ($x as $n => &$v) { }
$v = "DONT CHANGE!";
foreach ($y as $n => $v){ }
print_r($x);
die;
打印:
Array
(
[0] => hello
[1] => beautiful
[2] => harsh
)
为什么它会改变$ x的最后一个元素?它只是不遵循任何逻辑!
答案 0 :(得分:4)
// ...
$v = "DONT CHANGE!";
unset($v);
// ...
因为$v
仍然是引用,后来占用了最后一个foreach循环中的最后一项。
编辑:请参阅the reference所在位置(在代码块中)
unset($value); // break the reference with the last element
答案 1 :(得分:4)
执行此循环后:
foreach ($x as $n => &$v) { }
$v
最终作为对$x[2]
的引用。您分配给$v
的任何内容实际上都会被分配$x[2]
。所以在第二个循环的每次迭代中:
foreach ($y as $n => $v) { }
$v
(或者我应该说$x[2]
)成为:
'bye bye'
'world'
'harsh'
答案 2 :(得分:0)
Foreach循环不是函数。在foreach中的&符号(&)不能保存像函数那样的值。 因此,即使你在第二个foreach()中有$ var,也不要指望它像循环中的“幽灵”。