[PHP]연관배열과 foreach

김이홍·2023년 12월 10일

PHP

목록 보기
2/30
연관 배열의 인덱스는 숫자가 아니므로, for 문을 사용하여 배열 요소에 접근할 수 없습니다.

대신에 foreach 문이나 each() 함수를 사용하여 접근해야 합니다.

foreach 문을 사용하면 연관 배열 요소의 키값과 요소의 값을 변수에 따로 저장하여 루프 내에서 사용할 수 있습니다.

1.
foreach ($array as $key => $value)
'키'로서(as) '배열'을 순회한다.
+ 배열을 순회하면서 값을 $key라는 변수에 담는다.
+ ($key)에 대한 값은 $value에 담는다.

2.
foreach ($array as $value)
'값'으로서(as) '배열'을 순회한다.
=> 이때는 배열의 값만 $value에 담긴다.
=> $value는 내가 정한 변수다.

<?php

// => : 키와 값이란 의미(왼쪽이 키, 오른쪽이 값)

$Data = array(
    'SiteA' => array(
        'data1' => array('ex1' => 20, 'ex2' => 22, 'ex3' => 25),
        'data2' => array('ex1' => 18, 'ex2' => 21, 'ex3' => 23),
    ),
    'SiteB' => array(
        'data3' => array('ex1' => 15, 'ex2' => 17, 'ex3' => 19),
        'data4' => array('ex1' => 23, 'ex2' => 25, 'ex3' => 28),
    ),
);

foreach ($Data as $location => $datas) {
    // $Data 배열의 각 요소를 순회하면서
    // $location 변수에는 외부 루프에서의 키(여기서는 SiteA 또는 SiteB)가 할당됩니다.
    // $datas 변수에는 현재 $location에 해당하는 값, 즉 연관 배열이 할당됩니다.
    echo "Site: $location\n";
    
    foreach ($datas as $dataname => $Values) {
        // $datas의 연관 배열을 순회하면서
        // $dataname 변수에는 내부 루프에서의 키(여기서는 data1 또는 data2 등)가 할당됩니다.
        // $Values 변수에는 현재 $dataname에 해당하는 값, 즉 연관 배열이 할당됩니다.
        echo "  data: $dataname\n";
        
        // $Values를 이용하여 해당 Site, data의 값에 접근
        foreach ($Values as $exColumn => $value) {
            // $Values의 연관 배열을 순회하면서
            // $exColumn 변수에는 현재 $Values에서의 키(여기서는 ex1, ex2, ex3 등)가 할당됩니다.
            // $value 변수에는 현재 $exColumn에 해당하는 값이 할당됩니다.
            echo "    $exColumn: $value\n";
        }
    }
    echo "\n";
}


?>

<실행결과>

Site: SiteA
  data: data1
    ts1: 20
    ts2: 22
    ts3: 25
  data: data2
    ts1: 18
    ts2: 21
    ts3: 23

Site: SiteB
  data: data3
    ts1: 15
    ts2: 17
    ts3: 19
  data: data4
    ts1: 23
    ts2: 25
    ts3: 28

0개의 댓글