foreach での参照による受け渡し: 予期しない動作を理解する
PHP の foreach ループは配列内の各要素を反復処理しますが、場合によっては、その出力は驚くべきものになる可能性があります。次のコードを考えてみましょう:
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
期待どおり、出力は 'zero'、'one'、'two'、および 'three' になるはずです。ただし、このコードを実行すると、代わりに 'zero'、'one'、'two'、'two' が返されます。
この予期しない動作は、PHP の参照による変数の概念に起因します。最初の foreach ループでは、参照演算子「&」を使用して、$a 配列内の各要素への参照変数 ($v) を作成します。これは、$v に加えられた変更は、$a の対応する要素にも影響することを意味します。
最初は、$a のすべての要素は通常の変数です。ただし、最初のループの後は、$a[3] だけが参照変数として残ります。これは、配列の反復処理中に、前の参照変数 ($v) が新しい要素ごとに上書きされるためです。
2 番目のループで、$v をエコーすると、$a[3] を指します。これは、前の反復で「2」に設定されました。したがって、最後の反復では「three」の代わりに「two」がエコーされます。
通常の変数と参照変数の違い、およびそれらが foreach ループ内でどのように相互作用するかを理解することで、このような予期しない動作を回避し、コードが意図したとおりに動作することを確認してください。
以上が参照渡しを使用すると、PHP の「foreach」ループで予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。