2

看看这段代码,帮助我理解结果

$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 的 LAST 元素?它只是不遵循任何逻辑!

4

3 回答 3

4
// ...
$v = "DONT CHANGE!";
unset($v);
// ...

因为$v仍然是一个引用,它稍后会获取最后一个 foreach 循环中的最后一项。

编辑:查看它读取的参考(在代码块中)

unset($value); // break the reference with the last element

于 2012-11-30T18:28:35.187 回答
4

执行此循环后:

foreach ($x as $n => &$v) { }

$v最终作为对$x[2]. 无论你分配给什么,$v实际上都会被分配$x[2]。所以在第二个循环的每次迭代中:

foreach ($y as $n => $v) { }

$v(或者我应该说$x[2])变成:

  • 'bye bye'
  • 'world'
  • 'harsh'
于 2012-11-30T18:28:35.260 回答
0

Foreach 循环不是函数。foreach 中的 & 符号不能像函数一样保留值。因此,即使您在第二个 foreach () 中有 $var,也不要期望它像循环之外的“幽灵”。

于 2012-11-30T19:01:32.717 回答