본문 바로가기

PHP/PHP Programming

[PHP] foreach문 사용방법

반응형



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
            )
    */
?>

 출력결과


반응형