제어 구조
PHP Manual

foreach

PHP 4는 펄이나 다른 언어처럼 foreach구문을 지원합니다. 이런 구문은 간단하게 배열에 대한 작업을 수행하는 가장 쉬운 기법입니다. foreach는 배열에서만 작동하고 다른 데이터형을 갖는 변수나 초기화되지 않은 변수에 대해서 이 구문을 사용하려한다면 에러 메시지를 만날것입니다. 이 구문은 두가지 문법이 있습니다; 두번째보다는 첫번째문법이 더 유용한 사용법입니다:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

첫번째 형태는 array_expression에서 주어진 배열에 대해 루프를 돈다. 각 루프에서 현재 배열 원소의 값은 $value 로 지정되고 내부적인 배열 포인터는 하나씩 이동하게 된다 (그래서 다음 루프에서 다음 배열 원소를 보게 될것이다)

두번째 루프도 같은 일을 한다. 단 현재 배열 원소의 키(key)값은 각 루프의 $key변수로 지정된다.

PHP 5부터 객체 순환도 할 수 있습니다.

Note: foreach문이 처음 실행할때, 내부적인 배열 포인터는 자동적으로 배열의 첫번째 원소로 리셋된다. 따라서 foreach절 이전에 reset()함수를 호출할 필요는 없다.

Note: 배열이 참조되지 않는 이상, foreach는 지정한 배열 자체가 아닌 복사한 배열을 대상으로 작동합니다. foreach는 배열 포인터에 영향이 있습니다. foreach 도중이나 이후에는 리셋하지 않은 배열 포인터에 의존하지 마십시오.

PHP 5부터, $value 앞에 &를 붙여서 배열 원소를 쉽게 변경할 있습니다. 값을 복사하지 않고 참조합니다.

<?php
$arr 
= array(1234);
foreach (
$arr as &$value) {
    
$value $value 2;
}
// $arr은 이제 array(2, 4, 6, 8)입니다.
unset($value); // 마지막 원소로 참조를 제거합니다.

이는 반복할 배열을 참조할 수 있을 때(즉, 변수)만 가능합니다.

Warning

$value 참조와 마지막 배열 원소는 foreach 루프 뒤에도 남아 있습니다. unset()으로 제거하는 것을 권합니다.

Note: foreach는 '@'를 사용해서 에러메시지를 출력하지 못하도록 할 수 없습니다.

다음 예는 기능적으로 동일하다는것을 알 필요가 있다:

<?php
$arr 
= array("하나""둘""셋");
reset($arr);
while (list(, 
$value) = each($arr)) {
    echo 
"값: $value<br />\n";
}

foreach (
$arr as $value) {
    echo 
"값: $value<br />\n";
}
?>

다음 예도 기능적으로 동일하다:

<?php
$arr 
= array("하나""둘""셋");
reset($arr);
while (list(
$key$value) = each($arr)) {
    echo 
"키: $key; 값: $value<br />\n";
}

foreach (
$arr as $key => $value) {
    echo 
"키: $key; 값: $value<br />\n";
}
?>

더 많은 예제 코드들이 사용법에 대해서 설명해준다:

<?php
/* foreach 예제 1: 값만 */

$a = array(12317);

foreach (
$a as $v) {
   echo 
"\$a의 현재 값: $v.\n";
}

/* foreach 예제 2: 값 (표시를 위해 수동으로 접근 순서를 출력) */

$a = array(12317);

$i 0/* 가상 목적으로만 사용 */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* foreach 예제 3: 키와 값 */

$a = array(
    
"one" => 1,
    
"two" => 2,
    
"three" => 3,
    
"seventeen" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* foreach 예제 4: 다차원 배열 */

$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* foreach 예제 5: 동적 배열 */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>


제어 구조
PHP Manual