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 では表示できません。渡されたコピーを変更していないため