ホームページ >バックエンド開発 >PHPチュートリアル >参照渡しで foreach ループを使用すると、PHP 配列の最後の要素が重複するのはなぜですか?

参照渡しで foreach ループを使用すると、PHP 配列の最後の要素が重複するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-14 20:19:01449ブラウズ

Why does the last element in a PHP array duplicate when using a foreach loop with pass-by-reference?

PHP Foreach Pass by Reference: 最後の要素重複の謎が明らかに

次の PHP コードを考えてみましょう:

実行すると、元の配列 $arr が予期せず変更され、次のような結果になります。出力:

動作を理解する

最初の foreach ループの後、変数 $item は $arr[2] と同じメモリ位置への参照のままになります。 。したがって、引数を値で渡す 2 番目の foreach ループの各反復では、参照された値 (したがって $arr[2]) が新しい反復の値に置き換えられます。

詳細な説明

最初のループ:

  • $item は次の値を参照します。 $arr[0]、これは 'foo' です。
  • $item と $arr[0] はどちらも 'foo' を指します。
  • このプロセスは、$arr[1] と $ に対して繰り返されます。 arr[2].

最初のループの終わりでも、$item はまだ次を指しています。 $arr[2].

2 番目のループ:

  • $item には $arr[0] の値 ('foo') が割り当てられます。
  • $arr[2] ($item によって引き続き参照される) も 'foo' に設定されます。
  • これは元のファイルを上書きします$arr[2] の 'baz' の値。
  • 同じプロセスが $arr[1] に対しても発生し、最後に $arr[2] に $arr[2] の値が割り当てられます。前回の反復により、現在は「bar」です。

明確化誤解

この動作はバグとはみなされません。これは、PHP の参照の意図された動作と一致しています。ループの外で次の構文を使用した場合にも、同様の結果が観察されます。

結論

PHP で参照を操作する場合、次のことを認識することが重要です。参照された変数を通じて行われた変更は、元の値にも影響します。この動作は、望ましい結果に応じて効果的に活用することも、回避することもできます。

以上が参照渡しで foreach ループを使用すると、PHP 配列の最後の要素が重複するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。