Foreach 内で参照を使用すると、配列内で要素の値が繰り返されるのはなぜですか?
次の PHP コードを考えてみましょう:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
驚くべきことに、出力では、最後の要素の値が他の要素の値の結果:
Array ( [0] => a [1] => b [2] => c [3] => c )
奇妙な点の説明
この動作は、参照 (&) の使用に起因する PHP の文書化された側面です。
最初のループでは、配列の各要素が参照によって $v に割り当てられます。 $v が変更されると、元の配列内の参照要素が変更されます。そのため、後続のループで $v が再割り当てされると、参照に対応する配列要素が誤って変更されてしまいます。
解決策
この問題を回避するには、明示的に2 番目の foreach ループの前の最後の要素への参照:
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
理解段階的なプロセス
コード内で何が起こるかを段階的に説明します:
最初の foreach ループ:
2 番目foreach ループ:
以上がPHP Foreach ループで参照を使用すると要素値が繰り返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。