PHP 다차원 배열이란?
PHP에서 다차원 배열(Multidimensional Array)은 '배열의 배열'로 이해할 수 있습니다. 즉, 배열의 각 요소가 그 자체로 또 하나의 배열인 구조입니다. 내부에 포함된 요소들은 연관 배열(associative array)일 수도 있고, 인덱스 배열(indexed array)일 수도 있습니다.
이론적으로는 배열을 몇 단계든 중첩할 수 있지만, 실무에서 가장 많이 사용되는 형태는 외부 배열 안에 하나 이상의 배열을 담은 2차원 배열입니다.
기본 문법
2차원 배열은 아래와 같이 선언합니다. 먼저 연관 배열을 요소로 갖는 경우입니다.
// 2차원 연관 배열
$twodim = array(
"row1" => array("k1" => "v1", "k2" => "v2", "k3" => "v3"),
"row2" => array("k4" => "v4", "k5" => "v5", "k6" => "v6")
);
// 2차원 인덱스 배열
$twodim = array(
array("v1", "v2", "v3"),
array("v4", "v5", "v6")
);인덱스 방식의 2차원 배열에서 특정 요소에 접근하려면 행(row)과 열(column)의 인덱스를 순서대로 지정하면 됩니다.
$arr[row][column];
PHP 버전 참고 사항
배열 할당 시 대괄호([]) 문법은 PHP 5.4부터 지원됩니다. 따라서 그 이전 버전에서는 array() 함수를 사용해야 합니다.
예제 1: 인덱스 배열로 구성된 2차원 배열
아래 예제는 각 요소가 인덱스 배열인 2차원 배열입니다. foreach 반복문과 for 반복문 두 가지 방식으로 모든 요소를 출력합니다.
<?php
$arrs = array(
array(1, 2, 3, 4, 5),
array(11, 22, 33, 44, 55),
);
// foreach 반복문 사용
foreach ($arrs as $arr) {
foreach ($arr as $i) {
echo $i . " ";
}
echo "\n";
}
// for 반복문과 인덱스 접근 사용
$cols = count($arrs[0]);
$rows = count($arrs);
for ($i = 0; $i < $rows; $i++) {
for ($j = 0; $j < $cols; $j++) {
echo $arrs[$i][$j] . " ";
}
echo "\n";
}
?>실행 결과
1 2 3 4 5 11 22 33 44 55 1 2 3 4 5 11 22 33 44 55
예제 2: 연관 배열을 요소로 갖는 2차원 배열
다음 예제는 인덱스 배열의 각 요소가 연관 배열인 경우입니다. 키(key)와 값(value)을 함께 출력하는 방식으로 처리합니다.
<?php
$arrs = array(
array(1 => 100, 2 => 200, 3 => 300),
array(1 => 'aa', 2 => 'bb', 3 => 'cc'),
);
// foreach 반복문 사용
foreach ($arrs as $arr) {
foreach ($arr as $i => $j) {
echo $i . "->" . $j . " ";
}
echo "\n";
}
// for 반복문과 인덱스 접근 사용
for ($row = 0; $row < count($arrs); $row++) {
foreach ($arrs[$row] as $i => $j) {
echo $i . "->" . $j . " ";
}
echo "\n";
}
?>실행 결과
1->100 2->200 3->300 1->aa 2->bb 3->cc 1->100 2->200 3->300 1->aa 2->bb 3->cc
예제 3: 연관 배열로 구성된 2차원 배열
외부 배열 자체가 연관 배열이고, 그 값으로 또 다른 연관 배열을 갖는 구조입니다. 학생 이름을 키로, 학번과 점수를 값으로 저장한 예제입니다.
<?php
$arr1 = array("rno" => 11, "marks" => 50);
$arr2 = array("rno" => 22, "marks" => 60);
$arrs = array(
"Manav" => $arr1,
"Ravi" => $arr2
);
foreach ($arrs as $key => $val) {
echo "name : " . $key . " ";
foreach ($val as $i => $j) {
echo $i . "->" . $j . " ";
}
echo "\n";
}
?>실행 결과
name : Manav rno->11 marks->50 name : Ravi rno->22 marks->60
예제 4: 값을 인덱스 배열로 갖는 연관 배열
마지막 예제는 연관 배열의 각 값이 인덱스 배열인 경우입니다. 카테고리별로 항목 목록을 관리할 때 유용하게 활용할 수 있는 패턴입니다.
<?php
$arr1 = array("PHP", "Java", "Python");
$arr2 = array("Oracle", "MySQL", "SQLite");
$arrs = array(
"Langs" => $arr1,
"DB" => $arr2
);
foreach ($arrs as $key => $val) {
echo $key . ": ";
for ($i = 0; $i < count($val); $i++) {
echo $val[$i] . " ";
}
echo "\n";
}
?>실행 결과
Langs: PHP Java Python DB: Oracle MySQL SQLite
마무리
PHP의 다차원 배열은 데이터를 계층적으로 구성할 수 있게 해주는 강력한 기능입니다. 인덱스 배열과 연관 배열을 자유롭게 조합하여 복잡한 데이터 구조도 직관적으로 표현할 수 있으며, foreach나 for 반복문을 활용하면 중첩된 데이터도 손쉽게 순회하고 처리할 수 있습니다.