'foreach' ループでの参照動作: 配列の変更を理解する
PHP では、'foreach' ループ内で参照を使用すると、予期しないエラーが発生する可能性があります配列の変更。この動作は次のコードで強調表示されています:
$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 )
ステップバイステップの説明
この動作を理解するには、「foreach」の各反復中に発生する変更を追跡することが不可欠です。ループ:
最初の 'foreach' ループ (参照の反復) が完了しても、$v は $a[3] ('d') への参照を保持しています。
したがって、2 番目の 'foreach' ループ (値の反復) の後、配列 $a は、'c' が 2 回出現するように変更されています。
問題の解決
この予期しない動作を回避するには、反復ごとに参照の設定を解除することをお勧めします。 :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
これにより、期待される出力が得られます:
Array ( [0] => a [1] => b [2] => c [3] => d )
以上がPHP の「foreach」ループで参照を使用すると、予期しない配列変更が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。