ホームページ  >  記事  >  バックエンド開発  >  緊急のリクエスト: Foreache 配列トラバーサルの問題

緊急のリクエスト: Foreache 配列トラバーサルの問題

WBOY
WBOYオリジナル
2016-06-23 14:17:31958ブラウズ

foreachが走査するのは元の配列のコピーです foreachは最初に元の配列をコピーしてから走査するのか、それともポインタで1つずつ下に移動して値の情報とキーの情報を1つずつ保存するのか、専門家に質問したいです。次に、部分リング出力を実行しますか?

私は初心者です。上記は先生が説明した foreach の実行シーケンス図です。先生が説明した図に従うと、ポインターが 1 つずつ下に移動するにつれて、キーの値が 1 つずつコピーされます。そして出力します。

ただし、foreach ループ中に、元の配列は変更されます。元の配列に書き込み操作がない場合、Php の内部最適化は、書き込み操作が実行された場合、実際には元の配列をコピーしないとも言いました。元の配列はコピーされます。私の質問は、ポインター自体が foreach ループ中に移動し、最終的には不正な位置に移動するのですが、元の配列のポインターが移動しないのはなぜですか。 ?

以下に示すように

上図では、添字が 1 の場合、foreach ループ図によればポインタは添字 2 の要素を指しますが、添字が 1 の場合は元の配列がコピーされます。コピー処理中、ポインタは移動しません。なぜ、書き込み操作が実行されたときにポインタが指す要素を指すのでしょうか?緊急の解決策。ありがとうございます。


ディスカッションへの返信 (解決策)

マーク foreach の原理を学びましょう

私の目には、foreach() の後の current() が最後の項目を指しているのが普通ではないでしょうか。配列内で

ループの最後の項目のポイントが間違っています

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