for ループを記述する次の 2 つの方法について、最初の方法は実行時に無限ループに入っているように見えるのに対し、2 番目の方法はエラーを報告しますが、実行して結果を生成できるのはなぜですか。その影響はわかりません。このforループのcount関数は
<?php$arr = array(5, 2, 4, 6, 1, 3); for($i=1;$i<=count($arr);$i++) { $key = $arr[$i]; $j = $i-1; while($j>=0 && $arr[$j]>$key) { $arr[$j+1] = $arr[$j]; $j--; } $arr[$j+1] = $key; print_r($arr);}
<?php$arr = array(5, 2, 4, 6, 1, 3); for($i=1;$i<=6;$i++) { $key = $arr[$i]; $j = $i-1; while($j>=0 && $arr[$j]>$key) { $arr[$j+1] = $arr[$j]; $j--; } $arr[$j+1] = $key; print_r($arr);}
配列の添字は0から始まるのが常識です。
配列の添字は 0 から始まるのが常識です。
ああ、この常識はまだわかっていますが、countを使用するとなぜ無限ループに陥るのかわかりません。count($arr)は6に相当すると思うのですが、なぜ間違ってしまうのでしょうか。 。 。 $i が 6 に等しいとき、$j は 5 に等しい
$arr[$j+1] = $arr[$j] は $arr[6] = $arr[$j] です
これは $arr 要素に 1 を追加します。存在しません
当然、count($arr) は変更されています
ループ内に print_r($arr); があります。これがまだ見えませんか?
正しい書き方は
$arr = array(5, 2, 4, 6, 1, 3);for($i=1;$i<count($arr);$i++) { $key = $arr[$i]; $j = $i-1; while($j>=0 && $arr[$j]>$key) { $arr[$j+1] = $arr[$j]; $j--; } $arr[$j+1] = $key;}
$i が 6 の場合、$j は 5 に等しい
$arr[$j+1] = $arr[$j] は $arr[6] = $ arr[$ j]
これにより、存在しない要素が $arr に追加されます
当然、 count($arr) は変更されます
ループ内に print_r($arr); があります。
正しい書き方は
$arr = array(5, 2, 4, 6, 1, 3);for($i=1;$i<count($arr);$i++) { $key = $arr[$i]; $j = $i-1; while($j>=0 && $arr[$j]>$key) { $arr[$j+1] = $arr[$j]; $j--; } $arr[$j+1] = $key;}