...
1차원 배열
1차원 배열은 가장 기본적인 배열로 다음과 같은 문법에 따라 선언됩니다.
$배열이름 = array();
PHP에서는 array()라는 함수를 이용해 배열을 생성합니다.
배열 이름은 배열을 선언한 후에 해당 배열에 접근하기 위해 사용합니다.
$arr = array(); // 배열 생성
$arr[0] = "apple"; // 배열 요소 추가
$arr[1] = "banana";
$arr[2] = "orange";
$arr = array("apple", "banana", "orange"); // 배열 생성과 동시에 초기화
만약 해당 배열이 존재하지 않으면, 해당 이름으로 새로운 배열을 만든 후에 배열 요소를 추가합니다.
$arr[0] = "apple"; // 배열이 존재하지 않으므로, 먼저 배열을 생성한 후에 요소가 추가됨.
$arr[1] = "banana";
$arr[2] = "orange";
이때 배열 요소의 인덱스를 생략할 수 있는데, 이 경우에는 인덱스가 0부터 시작하여 1씩 증가하며 순서대로 저장됩니다.
$arr[] = "apple"; // 배열 인덱스를 생략하여, 순서대로 배열에 추가됨.
$arr[] = "banana";
$arr[] = "orange";
배열의 홀(hole)
PHP에서는 배열의 특정 인덱스에 배열 요소를 추가할 수 있습니다.
$arr = array(); // 배열의 생성
$arr[10] = "banana"; // 인덱스 10에만 배열 요소를 추가함.
var_dump($arr);
var_dump($arr[0]); // NULL
var_dump(isset($arr[0])); // false
var_dump(isset($arr[10])); // true
// isset() 함수는 인수로 전달받은 변수가 초기화되어 있는지를 확인해 줍니다.
위의 예제에서 배열 요소가 존재하는 인덱스는 10뿐이며, 나머지 인덱스에는 배열 요소가 존재하지 않습니다.
이렇게 인덱스에 대응하는 배열 요소가 없는 부분을 배열의 홀(hole)이라고 합니다.
PHP에서 이러한 배열의 홀(hole)을 참조하게 되면. 초기화되지 않은 변수를 참조할 때처럼 NULL을 반환합니다.
자바스크립트도 희소배열 이라는 개념이 있습니다. 이와 같다고 보면 됩니다. 대신 자바스크립트는 Null이 아닌 undefined를 반환합니다.
반복문 배열 접근
$arr = array(); // 배열의 생성
$arr[2] = "apple";
$arr[3] = "banana";
$arr[4] = "orange";
// $arr[0]과 $arr[1]은 배열의 홀(hole)이 됨.
for ($i = 0; $i < count($arr); $i++) { // for문
echo "$arr[{$i}] : ".$arr[$i]."<br>"; // apple, banana, orange
}
foreach ($arr as $element){ // foreach문
echo $element."<br>"; // Null, Null, apple, banana, orange
}
php에선 $arr.length가 없습니다. 그대신 count()함수를 통해서 배열 길이에 접근이 가능합니다.
하지만 위 예제에서 볼수 있듯이, count()함수는 빈 배열 홀은 무시합니다. 그대신 foreach는 무시하지않고 그대로 순회함을 알 수 있습니다.
2차원 배열
2차원 배열이란 배열 요소로 또 다른 1차원 배열을 사용하는 배열을 의미합니다.
$배열이름 = array(
array(),
array(),
...
);
2차원 배열은 1차원 배열과 같이 array() 함수를 사용하여 선언합니다.
1차원 배열과 다른 점은 array() 함수를 한 번 더 사용하여, 배열 요소에 또 다른 1차원 배열을 생성한다는 점입니다.
$arr = array( // 1차원 배열을 3개 갖는 2차원 배열 선언
array(),
array(),
array()
);
$arr[0][0] = "apple"; // 배열 요소 입력
$arr[0][1] = "korea";
$arr[0][2] = 1000;
$arr[1][0] = "banana";
$arr[1][1] = "philippines";
$arr[1][2] = 2000;
$arr[2][0] = "orange";
$arr[2][1] = "us";
$arr[2][2] = 1500;
echo $arr[0][0].", ".$arr[0][1].", ".$arr[0][2]."<br>";
echo $arr[1][0].", ".$arr[1][1].", ".$arr[1][2]."<br>";
echo $arr[2][0].", ".$arr[2][1].", ".$arr[2][2]";
$arr = array( // 1차원 배열을 3개 갖는 2차원 배열 선언과 동시에 초기화
array("apple", "korea", 1000),
array("banana", "philippines", 2000),
array("orange", "us", 1500)
);
for문으로 2차원 배열 접근하기
for($row = 0; $row < 3; $row++) {
for($column = 0; $column < count($arr[$row]); $column++){
echo $arr[$row][$column].", ";
}
}
3차원 배열
3차원 배열은 배열 요소로 2차원 배열을 사용하는 배열을 의미합니다.
$arr = array( // 2차원 배열을 2개 갖는 3차원 배열 선언과 동시에 초기화
array(
array("apple", "korea", 1000),
array("banana", "philippines", 2000),
array("orange", "us", 1500)
),
array(
array("carrot", "vietnam", 500),
array("cucumber", "korea", 1000),
array("pumpkin", "china", 2000)
)
);
연관 배열(associative array)
PHP에서는 숫자뿐만 아니라 문자열도 배열 요소의 인덱스로 사용할 수 있습니다.
만약 정수와 문자열 이외에 다른 타입의 값을 키값으로 사용하면, 내부적으로 정수와 문자열로 타입 변환이 이루어집니다.
자바스크립트의 맵(Map) 이라고 생각하면 편합니다. 대신에 키 값은 문자열, 정수 로만 사용해야 한다는 점만 다릅니다.
$array = array(); // 배열 생성
$array["apple"] = 1000; // 연관 배열 요소 추가
$array["banana"] = 2000;
$array["orange"] = 1500;
// 연관 배열 생성과 동시에 초기화
$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);
echo $array["apple"].", ".$array["banana"].", ".$array["orange"];
for문으로 연관 배열 접근하기
연관 배열의 인덱스는 숫자가 아니므로, for 문을 사용하여 배열 요소에 접근할 수 없습니다.
대신에 foreach 문이나 each() 함수를 사용하여 접근해야 합니다.
$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);
foreach ($array as $key => $value) {
echo $key." ".$value."<br>";
}
each() 함수는 배열 커서(array cursor)가 현재 가리키고 있는 배열 요소를 반환하고, 다음 배열 요소를 가리키도록 합니다. 이 함수는 가리키는 요소의 다음 요소가 배열의 마지막 요소라면 더는 동작하지 않습니다.
$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);
while($element = each($array)) {
echo $element['key']." ".$element['value']."<br>";
}
# 참고자료
https://tcpschool.com/php/php_array_associative
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.