foreach

(PHP 4, PHP 5, PHP 7, PHP 8)

foreach 구문은 배열을 반복하는 쉬운 방법을 제공합니다. foreach는 배열과 객체에서만 작동하며 데이터 유형이 다른 변수나 초기화되지 않은 변수에서 사용하려고 하면 오류가 발생합니다. 두 가지 구문이 있습니다.

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

첫 번째 형식은 iterable_expression에 의해 제공된 iterable을 순회합니다. 각 반복에서 현재 요소의 값이 $value에 할당됩니다.

두 번째 형식은 각 반복에서 현재 요소의 키를 $key 변수에 추가로 할당합니다.

foreachcurrent()key()와 같은 함수에서 사용되는 내부 배열 포인터를 수정하지 않습니다.

개체 반복을 사용자 정의할 수 있습니다.

루프 내에서 배열 요소를 직접 수정할 수 있으려면 $value 앞에 &를 붙입니다. 이 경우 값은 참조로 할당됩니다.

                  
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>
                  
                
경고

$value 및 마지막 배열 요소의 참조는 foreach 루프 후에도 유지됩니다. unset()으로 삭제하는 것이 좋습니다. 그렇지 않으면 다음과 같은 동작이 발생합니다.

                    
  <?php
  $arr = array(1, 2, 3, 4);
  foreach ($arr as &$value) {
      $value = $value * 2;
  }
  // $arr is now array(2, 4, 6, 8)

  // without an unset($value), $value is still a reference to the last item: $arr[3]

  foreach ($arr as $key => $value) {
      // $arr[3] will be updated with each value from $arr...
      echo "{$key} => {$value} ";
      print_r($arr);
  }
  // ...until ultimately the second-to-last value is copied onto the last value

  // output:
  // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
  // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
  // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
  // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
  ?>
                    
                  

참조로 상수 배열의 값을 반복하는 것이 가능합니다:

                  
<?php
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
?>
                  
                

메모: foreach는 @를 사용하여 오류 메시지를 억제하는 기능을 지원하지 않습니다.

사용법을 보여주는 몇 가지 추가 예:

                  
<?php
/* foreach example 1: value only */

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

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

/* foreach example 2: value (with its manual access notation printed for illustration) */

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

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

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

/* foreach example 3: key and value */

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

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

/* foreach example 4: multi-dimensional arrays */
$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 example 5: dynamic arrays */

foreach (array(1, 2, 3, 4, 5) as $v) {
    echo "$v\n";
}
?>
                  
                
list()로 중첩 배열 풀기

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

list() 값을 제공하여 배열 배열을 반복하고 중첩 배열을 루프 변수로 압축을 푸는 것이 가능합니다.

예를 들어:

                  
<?php
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b)) {
    // $a contains the first element of the nested array,
    // and $b contains the second element.
    echo "A: $a; B: $b\n";
}
?>
                  
                

위의 예는 다음을 출력합니다.

A: 1; B: 2
A: 3; B: 4
                

중첩 배열보다 더 적은 수의 요소를 list()에 제공할 수 있습니다. 이 경우 남은 배열 값은 무시됩니다.

                  
<?php
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a)) {
    // Note that there is no $b here.
    echo "$a\n";
}
?>
                  
                

위의 예는 다음을 출력합니다.

1
3
                

list()를 채울 배열 요소가 충분하지 않으면 알림이 생성됩니다.

                  
<?php
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b, $c)) {
    echo "A: $a; B: $b; C: $c\n";
}
?>
                  
                

위의 예는 다음을 출력합니다.

Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C:

Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C: