foreach

PHP4(PHP3는 아니다)는 perl 등의 다른 언어가 제공하는 foreach 구조를 제공한다. 이 구조는 배열에 있어서 반복적인 작업을 하는데 유용하다. 이것에는 두가지 문법이 있는데, 두 번째 것은 첫 번째 것의 부분 확장이라고 생각할 수 있으나 실제로 매우 유용하게 사용된다.

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

첫 번째 모양은 array_expression 으로 주어진 배열에 대해 루프를 수행한다. 개개의 루프작업내에서, 배열의 원소는 $value에 저장되고 내부 배열 포인터(internal array pointer)는 하나 전진하여 다음 작업시에 새로운 원소를 가져오도록 한다.

두 번째 모양은 첫 번째와 동일한 작업을 하지만, $key에 해당 원소의 키값을 저장하게 된다.

참고: foreach 문이 처음 수행될 때, 내부 배열 포인터(internal array pointer)는 자동적으로 배열의 첫번째 원소로 설정된다. 이말의 의미는 여러분이 foreach문을 사용할 때 reset()을 미리 호출할 필요는 없다는 것이다.

참고: Also note that foreach operates on a copy of the specified array, not the array itself, therefore the array pointer is not modified like with the each construct.

아래의 두 개의 문장은 동일한 결과를 만든다는 것을 알 수 있을 것이다. :

reset ($arr);
while (list(, $value) = each ($arr)) {
    echo "Value: $value<br>\n";
}

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

다음 두 개의 문장도 기능적으로 동일하다. :

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";
}

추가적으로 몇 개의 예제를 보자. :

/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
   print "Current value of \$a: $v.\n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

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

/* foreach example 3: key and value */

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

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