목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 关于for循环的一个错误

关于for循环的一个错误

Jun 23, 2016 pm 01:58 PM
주기 실수

如下两种for循环的写法,为什么第一种运行时好像进入了死循环,而第二种虽然会报错,但是可以运行出结果,不知道这个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 增加了一个本不存在的元素
很自然,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] => 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] => 5
    [5] => 6
)

谢谢版主,我这设置好像是等全部运行完后才进行输出,所以一直看不到print_r的内容,多谢多谢
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

작업을 완료할 수 없습니다(오류 0x0000771). 프린터 오류 작업을 완료할 수 없습니다(오류 0x0000771). 프린터 오류 Mar 16, 2024 pm 03:50 PM

작업을 완료할 수 없습니다(오류 0x0000771). 프린터 오류

HTTP 상태 코드 460의 원인 공개 HTTP 상태 코드 460의 원인 공개 Feb 19, 2024 pm 08:30 PM

HTTP 상태 코드 460의 원인 공개

Windows Sandbox를 시작하지 못했습니다. - 액세스가 거부되었습니다. Windows Sandbox를 시작하지 못했습니다. - 액세스가 거부되었습니다. Feb 19, 2024 pm 01:00 PM

Windows Sandbox를 시작하지 못했습니다. - 액세스가 거부되었습니다.

Windows 업데이트 프롬프트 오류 0x8024401c 오류에 대한 해결 방법 Windows 업데이트 프롬프트 오류 0x8024401c 오류에 대한 해결 방법 Jun 08, 2024 pm 12:18 PM

Windows 업데이트 프롬프트 오류 0x8024401c 오류에 대한 해결 방법

새 가상 머신을 생성하는 동안 서버에서 0x80070003 오류가 발생했습니다. 새 가상 머신을 생성하는 동안 서버에서 0x80070003 오류가 발생했습니다. Feb 19, 2024 pm 02:30 PM

새 가상 머신을 생성하는 동안 서버에서 0x80070003 오류가 발생했습니다.

코드 0xc000007b 오류 해결 코드 0xc000007b 오류 해결 Feb 18, 2024 pm 07:34 PM

코드 0xc000007b 오류 해결

파이오니어 오류 코드 수정 Kadena-Keesler 파이오니어 오류 코드 수정 Kadena-Keesler Feb 19, 2024 pm 02:20 PM

파이오니어 오류 코드 수정 Kadena-Keesler

Maven 환경 구성에서 흔히 발생하는 실수 방지: 구성 문제 해결 Maven 환경 구성에서 흔히 발생하는 실수 방지: 구성 문제 해결 Feb 19, 2024 pm 04:56 PM

Maven 환경 구성에서 흔히 발생하는 실수 방지: 구성 문제 해결

See all articles