2009-08-15 3 views
1

다음 while 루프를 PHP의 -loop으로 변환하려면 어떻게해야합니까?PHP의 while 루프를 -loop으로 변환하려면

while($row2 = pg_fetch_row($result_tags) 

는 -loops 나에게 오류의 원인이 있지만. while -loop은 다음과 같이 표시됩니다.

for ($i = 0 ; $i < count(pg_fetch_row($result_tags)) ; $i++) 
+4

while 문에서 오류가 누락되지 않았습니까? –

+2

while 루프에서 어떤 종류의 문제가 있습니까? – outis

+0

답변 해 주셔서 감사합니다. –

답변

9

whilefor으로 변환 할 수 없습니다.

for 루프가 증분 루프에 사용됩니다. while 루프는 조건이 false이 될 때까지 코드를 실행하는 데 사용됩니다. for 루프는 대부분 while 루프 (for 루프는 문법적으로 향상된 while 루프입니다)로 쉽게 변환 할 수 있지만 반대는 항상 가능하지는 않습니다. pg_fetch_row()falsy value 반환 될 때까지

while($row = pg_fetch_row($result)) { } 

이 루프가 실행 :

는 다음 루프를 고려하십시오.

참고 : 같은 루프에 대한 올바른 구문은 다음과 같습니다

:

    while(($row = pg_fetch_row($result)) !== FALSE) { } 불행하게도

, 당신은 for 루프를 사용하여 올 수있는 가장 가까운는 다음과

for(; $row = pg_fetch_row($result) ;) {} 

과 완전히 똑같을 것이다.어쨌든 루프.

참고 :는 다시, 이러한 루프에 대한 올바른 구문은 다음과 같습니다

    for(; ($row = pg_fetch_row($result)) !== FALSE ;) { }

나는 당신이 당신의 코드에 돌아가서 문제의 정확한 원인을 발견해야한다고 생각 대신 루프의 사용을 비난하는 대신 while.

pg_fetch_row()은 열 배열을 반환하므로 count()을 사용할 수 없습니다.

이 같은 pg_num_rows을 사용하고있을 것 for 루프를 사용하여 올 수있는 가장 가까운 :

for($i = 0; $i < pg_num_rows($result); $i++) { 
    $row = pg_fetch_row($result); 
} 

그러나 개인적으로 나는 불필요하게 자세한 정보와 더 많은 문제에 열려 찾을 수 있습니다.

+2

+1. 이 대답은 "! == FALSE"테스트에 대한 설명을 사용할 수 있습니다. 즉, 빈 배열은 'pg_fetch_row (...)'가 행을 반환 했음에도 불구하고 FALSE로 저글링 된 유형이며 루프가 종료됩니다. 물론 행에 열이 없으면 루프를 건너 뛰고 싶을 수 있습니다. 또한 "! == FALSE"테스트는 구문이 아닌 의미의 문제입니다. – outis

+0

예 ...하지만 "적절한 의미"를 말할 수는 없습니다 ... 그래서 구문을 말한 것입니다. –

1

왜이 작업을 수행 하시겠습니까? 더 좋은 방법은 $i = 0을 선언/인스턴스화 한 다음 while 루프 끝 부분에서이를 증가시키는 것입니다.

이다
init; 
while (test) { 
    body; 
    incr; 
} 

는 for 루프는 while 루프의 특별한 종류이다 루프 다른 방향으로 가고

5

, A :에

for (init; test; incr) {body;} 

는 동일하다. 개인적으로 while 루프를 for 루프로 변환하면 오류가 줄어들 것입니다.

+0

이것을 보여 주셔서 감사합니다. –

관련 문제