ホームページ >バックエンド開発 >PHPチュートリアル >foreach ループ中にデータを配列に動的に追加する

foreach ループ中にデータを配列に動的に追加する

WBOY
WBOYオリジナル
2016-07-29 09:04:472579ブラウズ

データは foreach ループ中に動的に配列に追加されます。かつて私がプロジェクトに取り組んでいたとき、foreach 中にデータを動的に配列に追加する必要がありました(ここで例を示します)

foreach ループ中にデータを配列に動的に追加する

結果:

foreach ループ中にデータを配列に動的に追加する

ねえ?これは、foreach ループ中にデータを動的に配列に追加できることを示しています。なぜ、$arr 内のデータは、foreach ループによって追加されないのでしょうか。
オンラインで検索したところ、foreachループが実際に行うのは配列自体ではなく、配列のコピーであることがわかりました。実行結果によると、配列を変更する前に作成されたコピーである必要があります。元の値は確かにループ配列で変更されていますが、ループはコピーされた配列 (つまり、古い配列) であるため、新しく追加された要素にループすることはできません
わかりました、今は我慢してください
参照を使用する場合foreach 中に代入すると、新しく追加されたデータは次のようになります。 ループが発生します

foreach ループ中にデータを配列に動的に追加する

結果:

foreach ループ中にデータを配列に動的に追加する

そして、foreach ($arr as &$v){···} の場合、このメソッドは値を割り当てます$v と $arr [$k] は値をコピーするのではなく、参照することで同じメモリアドレスを指します。このとき、foreach ループは元の配列になるため、配列のポインタも元の配列に移動されます。新しく追加されたデータはループアウトされる可能性があり、値の変更は配列自体の値にも直接影響します

& を使用すると、foreach は元の配列を直接ループするので、私はどうでしょうか?

foreach ループ中にデータを配列に動的に追加する

結果:

foreach ループ中にデータを配列に動的に追加する

& は元の配列を直接操作しているのに、unset($v) 後に元の配列が変更されないのはなぜですか?


foreach ($arr as &$v){···}の場合、$v=&$arr[$k]$arr[$k]と同等であり、$vは$arr[$k]を指します]同時にメモリアドレスは、unset($v)であっても、メモリ空間への$vの参照を削除するだけで、メモリアドレスへの$arr[$k]の参照は削除しないので、$arr[ $k] はまだ生きており、$ arr は当然変化しないので、次のようになります

foreach ループ中にデータを配列に動的に追加する

結果:

foreach ループ中にデータを配列に動的に追加する

もう 1 つの注意事項: &$k 結果は

foreach ループ中にデータを配列に動的に追加する

結果:

foreach ループ中にデータを配列に動的に追加する

意味: キーを引用符で囲むことはできず、そのような文法形式はまったくありません

上記では、foreach ループ中の配列へのデータの動的追加について説明しており、関連する内容も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。

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