0

重複の可能性:
foreach の
奇妙な動作 参照によるループ後の奇妙な動作 - これは PHP のバグですか?

Foreach に問題があります。2 番目の foreach を理解できません。

$foo 配列の 3 番目の部分の値に「2」が含まれているのはなぜですか!

私たちが知っている限りでは、「&」(最初の foreach で) を削除すると問題は解決しますが、なぜでしょうか?

<?php

$foo = array('one', 'two', 'three');

foreach ($foo as &$bar)
{
// no-op
}

var_dump($foo);

foreach ($foo as $bar)
{
 // no-op
}

var_dump($foo);
?>
###############################################

生成:

 array(3) {
   [0]=>string(3) "one"
   [1]=>string(3) "two"
   [2]=>&string(5) "three"
  }
   array(3) {
  [0]=>string(3) "one"
  [1]=>string(3) "two"
  [2]=>&string(3) "two"
  } 
4

2 に答える 2

2

ドキュメントから:

$ valueと最後の配列要素の参照は、foreachループの後も残ります。unset()で破棄することをお勧めします。

だからあなたの場合:

<?php

$foo = array('one', 'two', 'three');

foreach ($foo as &$bar)
{
    // no-op
}

var_dump($foo);

unset($bar);

foreach ($foo as $bar)
{
 // no-op
}

var_dump($foo);
?>
于 2012-07-25T19:17:14.027 に答える
0

最初の foreach では、'&' 記号で参照を使用しているため、値は実際に変更されます。最初の foreach の内容はわかりませんが、古い値を上書きしているため、2 番目の foreach の値は最初と同じではありません。

編集この投稿にはきちんとした答えがあります。または、推奨されるように unset を使用してください

于 2012-07-25T19:16:04.793 に答える