次のコードがそのような結果を出力するのはなぜですか?全部空にすべきではないでしょうか? $a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); for ($i = 0; $i < count($a1); $i++) { array_splice($a1,$i, 1); } print_r($a1); ログイン後にコピー 効果: 配列 ( [0] => 猫 [1] => 鳥 ) PHP 共有先: -----解決策---------プロセスをシミュレートする 最初のループ array_splice($a1,0, 1); $a1 は $a1=array(0=>"Cat",1=>"Horse",2=>"Bird"); になります。 2 番目のループ array_splice($a1,1, 1); $a1 は $a1=array(0=>"Cat",1=>"Bird"); になります。 3 番目のループ $i==2 count($11)==2 はループ条件を満たさないため、ループは終了します-----解決策----------- -- ------ご自身でご覧ください$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); for ($i = 0; $i < count($a1); $i++) { array_splice($a1,$i, 1); echo "i=$i ", print_r($a1, 1), ''; } print_r($a1);ログイン後にコピーi=0 Array ( [0] => Cat [1] => Horse [2] => Bird ) i=1 配列 ( [0] => 猫 [1] => 鳥 ) 配列 ( [0] => 猫 [1] => 鳥 ) 問題は、出発点が間違っていることです -----解決策----------------------これは理解するのは難しくありません Bar count($a1) は、array_splice が削除されるたびに変化します $a1=array(0=>"犬",1=>"猫",2=>"馬",3=>"鳥"); for ($i = 0; $i array_splice($a1,$i, 1); } print_r($a1); 最初のループ $i = 0, count($a1)=4 delete Dog, $a1=array(0=>"Cat",1=>"Horse",2=>"Bird") ; 2 番目のループ、$i = 1、count($a1)=3 馬を削除、$a1=array(0=>"Cat",1=>"Bird"); 3 番目のループ、$i = 2、count($a1)=2 削除できる値はありません。$a1=array(0=>"Cat",1=>"Bird"); ループを終了します。 結果はです $a1=array(0=>"猫",1=>"鳥");-----解決策-------------- - -----ここで count($a1) に注意する必要があります。これはループするたびに計算する必要がありますが、3 回目のループごとに内部の要素が 1 ずつ減ります。要素数も $i も 2 なので終わりなので、カウントを持ち出しても、つまりここに直接 4 と書いても、きっと要素は 2 つ残っているはずです。見てください。ただし、ここの $i は常に増加しており、3 番目のループにはまだ要素が 2 つありますが、3 番目の位置がないので、最後にこの $ を出力できるはずです。 for ループ a1 で、毎回何が起こるか、そしてその理由を見てください