연관 배열의 인덱스는 숫자가 아니므로, 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