for루프는 PHP에서 제일 복잡한 루프이다. C와 똑같은 방식으로 동작한다. for루프의 문법은 다음과 같다:
for (expr1; expr2; expr3) statement
첫번째 표현식(expr1)은 루프의 시작에서 바로 조건없이 평가된다 (수행된다).
각 반복(iteration)의 시작부분에서 expr2이 평
가된다. 이 표현식이 TRUE
이면 루프는 계속되고 내포된 구문(들)이
수행된다. FALSE
이면, 루프 수행을 멈춘다.
expr3표현식은 각 반복의 끝부분에서 평가된다 (수행된다).
각 표현은 비어있거나 콤마로 구분한 여러 표현을 가질 수 있습니다.
expr2에서, 콤마로 구분한 표현은 모두 평가되지만 결과는
마지막 부분에서만 가져옵니다.
expr2이 비어있다는
것은 루프가 무제한 수행되어야 한다는 것을 의미한다 (PHP는 C처럼 TRUE
로 인식)
이런 기법은 생각처럼 필요없지는 않다. 왜냐 하면 종종 for문의
표현식 대신에 break문으로
루프를 끝낼 필요가 있기 때문이다.
다음 예제 코드들을 보세요. 이 코드 모두 1부터 10까지의 숫자를 출력한다:
<?php
/* 예제 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* 예제 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* 예제 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* 예제 4 */
for ($i = 1, $j = 0; $i <= 10; $j += 1, print $i, $i++);
?>
물론, 첫번째 예제(혹은 네번째) 코드가 가장 좋은 방법이다. 그러나 for루프에서 빈 표현식을 사용해야 하는 경우도 부딪히게 될것이다.
PHP는 for루프에 대한 대체 "콜른 문법"을 지원한다.
for (expr1; expr2; expr3): statement ... endfor;
많은 사용자가 아래 예제처럼 배열을 탐색합니다.
<?php
/*
* 이 배열은 루프를 도는 동안
* 변경할 데이터를 가지고 있습니다.
*/
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863),
);
for($i = 0; $i < sizeof($people); ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>
문제는 두번째 표현식입니다. 이 코드는 매 실행마다 배열의 크기를 계산하기 때문에 느려집니다. 크기는 변하지 않기 때문에, 크기를 저장하는 중간 변수를 사용하여 루프를 돌리도록 최적화 할 수 있습니다. 아래 예제가 보여줍니다:
<?php
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863),
);
for($i = 0, $size = sizeof($people); $i < $size; ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>