ホームページ >バックエンド開発 >PHPチュートリアル >foreach はポインターの問題をどのように処理するのでしょうか?

foreach はポインターの問題をどのように処理するのでしょうか?

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

foreach トラバーサルは元の配列のコピーです

たとえば、 $a1=array('a','b','c');
foreach($a1 as $k=>$v){
echo $v ,'
';
if($k==1){
$a1[3] ='d'; }
}
var_dump(current($a1)); foreach 後 foreach が元の配列のコピーを走査するとき、最初に元の配列全体をコピーしてからそれを走査するのか、それとも元の配列の要素を 1 つずつコピーして変数 $ に格納するのかを知りたいです。 k $v は、1 つを保存し、それをエコーし​​て 1 つを出力します。foreach 実行のフローチャートは 2 番目のタイプと考えられます。

2番目の方法に従って理解すると、if($k==1、元の配列が書き込まれると、ポインターが3番目の要素を指すときにforeachは実際のコピーを作成します)、ここで混乱します。要は元の配列のポインタを一つずつコピーして格納することでforeachの実行フローチャートが完成しますが、このコードが最後に出力する$a1のポインタは3番目の要素Cを指していて移動しません。私の2番目の理解によると、ポインタを移動せずにforeachトラバースを完了するにはどうすればよいですか?

これは、$a1 のコピー ($a2 など) です。このようにして、配列が横断するものは、実際には $a2 であると先生が言ったことを理解できます。元の配列

以上です まずは $a1 を丸ごとコピーして $a2 の要素を一つずつ変数に格納して出力します





議論への返信(解決策)

配列ポインタのセットは 2 つあり、1 つは添え字と関連するキーを確認できます。もう 1 つのセットは内部にあり、見ることはできませんが、

foreach はコピーを渡すだけで操作できます。 foreach で変更、追加、削除された配列メンバーは、foreach では表示できません。渡されたコピーを変更していないため


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