当前位置:Gxlcms > PHP教程 > 关于for循环的一个异常

关于for循环的一个异常

时间:2021-07-01 10:21:17 帮助过:8人阅读

关于for循环的一个错误
如下两种for循环的写法,为什么第一种运行时好像进入了死循环,而第二种虽然会报错,但是可以运行出结果,不知道这个for循环中count函数有什么影响

$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);
}



$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);
}

------解决方案--------------------
当 $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 $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] => 5
[5] => 6
)

人气教程排行