foreach문은 배열에서만 작동합니다. 배열이 아니면 php코드 내에 오류메시지를 출력하고, 다차원 배열이나 중첩도 가능하며, 키(key)와 원소(value)로 분리, 변수로 지정 가능합니다.

 // 첫번째 문법
 foreach (array_expression as $value) {
    statement;
 }

 // 두번째 문법
 foreach (array_expression as $key => $value) {
    statement;
 }

두가지 문법중 첫번째 문법은 배열의 원소만 가져오고, 두번째 문법은 키(key)와 원소(value)를 가져옵니다. 이 중 첫번째 문법이 더 유용할 것입니다. 아래 예제는 첫번째 문법을 사용한 것인데, $value앞에 "&"를 붙여서 다른 $arr배열원소로 쉽게 변경가능합니다.

 <?php
 $arr 
= array(1234
);
 foreach (
$arr as &$value
) {
    
$value $value 2
;
 }
 unset(
$value); 
// $value변수는 필요가 없으므로 삭제를 합니다.
 
var_export($arr
);

 
/*
  결과:
  array (
  0 => 2,
  1 => 4,
  2 => 6,
  3 => 8,
 )
 */
 ?>

다음은 다차원 배열을 중첩하여 원소(value)로 분리한 예입니다.

 <?php
 $a 
= array();
 
$a[0][0] = "a"
;
 
$a[0][1] = "b"
;
 
$a[1][0] = "y"
;
 
$a[1][1] = "z"
;
 
$b = array(); 
// 배열을 분리, $b변수에 작성하기 위해 초기화합니다.

 
foreach ($a as $v1) { 
// $a배열이 이차원 배열이므로 foreach가 두번 작성됩니다.
    
foreach ($v1 as $v2
) {
        
$b[] =  "$v2\n"
;
    }
 }
 
var_export($b
);

 
/*
 결과: 
 array (
  0 => 'a',
  1 => 'b',
  2 => 'y',
  3 => 'z',
 ) 
 */
 ?> 

아래는 키(key)와 원소(value)를 분리한 예입니다.

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

 foreach (
$a as $k => $v
) {
    echo 
"$k => $v.\n"
;
 }
 
/*
 결과:
 one => 1.
 two => 2.
 three => 3.
 seventeen => 17.
 */
 
?> 


다음 예도 기능적으로 동일하다는 것을 알 수 있습니다.

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

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

 
/*
 결과:
 while 값: 하나<br />
 while 값: 둘<br />
 while 값: 셋<br />

 foreach 값: 하나<br />
 foreach 값: 둘<br />
 foreach 값: 셋<br />
 */
 ?>


if, while, for문 등 제어문과 마찬가지로 foreach문도 동일하게 아래 표현방식을 사용할 수 있습니다.

 // 괄호 문법
 foreach (array_expression as $value) {
    statement;
 }

 // 짧은 문법
 foreach (array_expression as $value)
    statement;

 // 콜론 문법
 foreach (array_expression as $value):
    statement;
 endforeach;


다른 함수나 제어문 앞에 @를 붙여서 오류가 날 경우 에러 출력을 감출 수 있는데, foreach문만은 @로 에러 출력을 제어하지 못하기 때문에 아래 방법으로 감추게 합니다.

 <?php
 $arr 
null
;
 if(
is_array($arr)) { 
// 배열이면 실행합니다.
     
foreach ($arr as $value
) {
        echo 
"값: $value<br />\n"
;
     }
 }
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요