PHP 매뉴얼
이전 | 11. 장. 제어 구조 | 다음

# `foreach`

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

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

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

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

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

> 참고: `foreach`는 특정 배열의 복사본에 작용하는것이며 배열 자체를 직접 건드리지 않는다. 따라서, 배열 포인터는 each()함수 에 의해 변경이 되는것이 아니다. 넘어온 배열요소에 대한 변화는 원래 배열에는 영향을 주지 않는다. 하지만, 원래 배열의 내부적 포인터는 배열 처리에 의해 이동한다. foreach루프는 완료될때까지 루프를 돌고, 배열의 내부적 포인터는 배열 끝을 가리키게된다.

> 참고: `foreach`는 '@'를 사용해서 에러메시지를 출력하지 못하도록 할수는 없다.

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

`<?php $arr = array("one", "two", "three"); reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br />\n"; } foreach ($arr as $value) { echo "Value: $value<br />\n"; } ?>`

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

`<?php $arr = array("one", "two", "three"); reset ($arr); while (list($key, $value) = each ($arr)) { echo "Key: $key; Value: $value<br />\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n"; } ?>`

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

`<?php
/* foreach 예제 1: 값만 */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "\$a의 현재 값: $v.\n";
}
/* foreach 예제 2: 값 (키는 가상으로 출력) */
$a = array(1, 2, 3, 17);
$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[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(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>`

이전 | 처음으로 | 다음
`for` | 위로 | `break`