ホームページ  >  記事  >  バックエンド開発  >  なぜphp foreachは操作のために配列をコピーする必要があるのですか?

なぜphp foreachは操作のために配列をコピーする必要があるのですか?

WBOY
WBOYオリジナル
2016-08-18 09:16:291187ブラウズ

目的は何ですか?

返信内容:

目的は何ですか?

どういう意味ですか?無知で申し訳ありませんが、どういう意味ですか?

PHP foreach は動作するために配列をコピーする必要はありません。配列をコピーする必要があることをどこで知りましたか?

PHPのforeachは配列のコピーを走査するのは、おそらく走査中の変更(項目の追加)によって引き起こされる無限ループを回避するためだと思います。
単なる推測です。 。 。

質問者が知りたいのは、foreach的内部实现时, 是复制了一个临时变量実際の配列の操作方法ではなく、操作方法です

私はこの質問についていつも混乱していました。次の回答は参考用です。笑

PHPカーネルを深く理解するためのリファレンス

リーリー

操作するための証明を見てみましょう foreach在循环是确实是复制了一个临时变量 リーリー

結果は以下の通りです

リーリー

上記のように、

内部で呼び出された場合、ループ処理は変更されませんforeach在循环开始前, 调用nextend时, 会改变数组指针位置,而在foreach

走査されたコードでは、配列ポインタが end、next などで操作されるとき、配列ポインタは変化しません。これは、PHP カーネルが FETCH 操作を実行するときに、現在操作されている配列の内部ポインタが変更されるためです。要素を走査するたびに、以前に保存されたポインタ位置が最初に取得され、次の要素を取得した後にポインタ位置が復元されます。キーは FETCH の実行中に中間変数にあります。オペコード

ここでは、

ループ中に時々動作する元の配列が、元の配列のコピーであることがわかります。 foreachそれでは、元の配列を操作するのではなく、なぜ配列をコピーして操作する必要があるのか​​という質問に答えましょう。私の考えは、

が元の配列を操作している場合、

の元の配列の値を変更する、または新しい要素を追加すると、どうなるでしょうか? 質問者さんがこう考えれば分かりますforeach操作的是原数组, 那么在foreach リーリー

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