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]ます。したがって、2番目のループの各反復で:

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

$v(または私が言うべきです$x[2])は次のようになります:

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

foreach ループは関数ではありません。 foreach でのアンパサンド (&) は、関数でのように値を保持するために機能しません。したがって、2 番目の foreach () に $var があるとしても、それがループから「ゴースト」のようになるとは思わないでください。

于 2012-11-30T19:01:32.717 に答える