■ foreach 문
foreach 문은 배열에서만 작동한다. 배열이 아니면 php코드 내에 오류메시지를 출력한다. 다차원 배열이나 중첩도 가능하며, 키 (key )와 원소 (value )로 분리하거나 변수로 지정가능하다.
<?php // 첫번째 문법 foreach (array_expr as value) { statement; } // 두번째 문법 foreach (array_expr as key => value) { statement; } ?>
두 가지 문법 중 첫 번째 문법은 배열의 원소만 가져오고, 두 번째 문법은 키 (key )와 원소 (value ) 를 가져온다. 이 중 첫 번째 문법이 더 유용할 것이다. 아래 예는제는 첫 번째 문법을 사용한 것인데, value 앞에 "& "를 붙여서 다른 arr 배열원소로 참조 변경이 가능하다.
ex01.php
<?php $arr = array(1, 2, 3, 4); foreach ($arr as & $value) { $value = $value * 2; } var_export($arr); ?>
출력결과
다음은 다차원 배열을 중첩하여 원소 (value )로 분리한 예입니다.
ex02.php
<?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"; } } var_export($b); ?>
출력결과
아래큰 키 (key )와 원소 (value )를 분리한 예이다.
ex03.php
<?php $a = array( "one" => 1 , "two" => 2 , "three" => 3 , "seventeen" => 17 ); foreach ($a as $k => $v) { echo "$k => $v<br/>"; } ?>
출력결과
다음 예제도 기능적으로 동일하다.
ex04.php
<?php $arr = array("하나", "둘", "셋"); reset($arr); while (list(, $value) = each($arr)) { echo "while 값 : $value<br/>"; } echo "<hr/>"; foreach ($arr as $value) { echo "foreach 값 : $value<br/>"; } ?>
출력결과
if , while , for 문과 마찬가지로 foreach 문도 동일하게 아래 표현방식을 사용할 수 있다.
<? // 괄호 문법 foreach (array_expr as value) { statement; } // 짤은 문법 foreach (array_expr as value) statement; // 콜론 문법 foreach (array_expr as value) : statement; endforeach ; ?>
변수가 배열이 아니면 php 오류를 표시하므로 다음 예제처럼 오류 출력을 제어할 수 있다.
ex05.php
<?php $arr = null; if (is_array($arr)) { // 배열이면 실행합니다. foreach ($arr as $value) { echo "값 : $value<br/>"; } } ?>
ex06.php
<?php $arr = null; foreach ((array)$arr as $value) { echo "값 : $value<br/>"; } ?>
■ 다차원 배열 일괄처리 소스
_GET, _POST, _FILES 의 외부 배열 변수를 일괄 처리하는 함수이다.
ex07.php
<?php // 다음 _GET 변수를 일괄처리되게 합니다. $_GET['var1'] = 1; $_GET['var2'] = ""; $_GET['var3'] = null; $_GET['var4'] = "테스트입니다."; $_GET['var5']['ARG1'] = "ARG1"; $_GET['var5']['ARG2'] = "ARG2"; $_GET['var5']['ARG3']['ARG4'] = "3차배열"; $_GET['var5']['ARG3']['ARG5']['VAR'] = "4차배열"; $_GET['var5']['ARG4'] = "NULL"; $_GET['var5']['ARG5']['ARG6'] = "TEAT"; $_GET['var6'] = 2; function replace_data($arg) { $get = array(); if(is_array($arg)) { while(list($k,$v) = each($arg)) { if(is_array($arg[$k])) { while(list($k2,$v2) = each($arg[$k])) { $get[$k][$k2] = $arg[$k][$k2]; replace_data($get[$k][$k2]); } } else { // 일괄처리할 작업코드를 작성합니다. $get[$k] = $v; } } } unset($_GET); // _GET 변수를 지워버림. return $get; } // end func $get = replace_data($_GET); print_r($get); print_r($_GET); // 결과: _GET 외부 변수는 지워 버렸으니 출력하지 않습니다. /* 결과 : Array ( [var1] => 1 [var2] => [var3] => [var4] => 테스트입니다. [var5] => Array ( [ARG1] => ARG1 [ARG2] => ARG2 [ARG3] => Array ( [ARG4] => 3차배열 [ARG5] => Array ( [VAR] => 4차배열 ) ) [ARG4] => NULL [ARG5] => Array ( [ARG6] => TEAT ) ) [var6] => 2 ) */ ?>
출력결과
공유하기
URL 복사 카카오톡 공유 페이스북 공유 엑스 공유