forループに関するエラー

WBOY
リリース: 2016-06-23 13:58:27
オリジナル
1264 人が閲覧しました

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;}
ログイン後にコピー
ログイン後にコピー
Array です
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] =& gt ; 5
[5] => 6
)

$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;}
ログイン後にコピー
ログイン後にコピー
Array です
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] =& gt ; 5
[5] => 6
)
モデレーターさん、私の設定ではすべてが完了するまで出力されないようなので、print_r の内容が表示されません

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート