PHP 배열 (Arrays)
PHP 배열 (Arrays)
PHP의 배열은 사실 일반적인 배열 개념과 조금 달라요. **순서 있는 키-값 사상(ordered map)**이 본체예요. 그래서 같은 타입 하나로 배열(list)·벡터·해시 테이블·딕셔너리·스택·큐 등 여러 역할을 모두 소화해요. 값은 어떤 타입이든 들어갈 수 있고, 배열 안에 배열이 중첩되는 다차원 배열도 자유롭게 만들 수 있어요.
출처: PHP 매뉴얼 - Arrays
본문
배열 만들기
array() 구성(construct)이나 짧은 배열 문법 []로 만들 수 있어요. 쉼표로 구분한 key => value 형태의 쌍을 인자로 받아요.
$array1 = [
"foo" => "bar",
"bar" => "foo",
];
키의 규칙
키는 int 또는 string만 가능하고, 값은 아무 타입이나 가능해요. 숫자로 보이는 문자열 키는 정수로 변환되는데, 예를 들어 "1"은 1로 처리돼요. 그 외 타입(예: true, 1.5)은 자동 변환이 일어나고, 같은 키가 다시 등장하면 마지막 값이 이전 값들을 덮어써요.
$array = array(
1 => "a",
"1" => "b", // "b"가 "a"를 덮어씀
true => "c", // true는 1로 변환되어 다시 "c"로 덮어씀
);
var_dump($array); // [1 => "c"]
원소 접근과 수정
대괄호 문법 $array[key]로 접근해요. 지정한 키가 없으면 자동으로 채워 넣을 수도 있어요.
$arr[5] = 1;
$arr[] = 56; // 키를 안 주면 가장 큰 정수 키 + 1 → $arr[6] = 56
$arr["x"] = 42; // 새 원소 추가
unset($arr[5]); // 특정 키를 제거
unset()으로 키를 지워도 배열은 재인덱싱되지 않아요. 정말로 '앞으로 당기기'가 필요하면 array_values()로 재인덱싱해요.
배열 구조 분해
PHP 7.1부터 [] 또는 list()로 배열을 별도의 변수로 풀어낼 수 있어요. foreach 안에서 다차원 배열을 분해해 쓰기에도 좋아요.
[$b, $a] = [$a, $b]; // 두 변수 값 맞바꾸기
$source = ['foo' => 1, 'bar' => 2, 'baz' => 3];
['baz' => $three] = $source; // $three = 3
전개 연산자(Array unpacking)
PHP 7.4부터 배열 앞에 ...를 붙이면 해당 배열이 그 자리에서 펼쳐져요. Traversable을 구현한 객체도 펼칠 수 있어요.
$arr1 = [1, 2, 3];
$arr2 = [0, ...$arr1, 4]; // [0, 1, 2, 3, 4]
알아두면 좋은 함수
count()로 원소 개수를 세고, sort()류 함수로 순서를 바꿔요. 배열은 항상 값 복사로 할당되므로, 참조로 공유하고 싶다면 &$arr처럼 참조 연산자를 써야 해요.
$arr1 = [2, 3];
$arr2 = $arr1; // 값 복사
$arr2[] = 4; // $arr1은 그대로 [2, 3]
배열 전용 함수는 array_로 시작하는 것이 많아요. array_merge(), array_map(), array_filter() 같은 함수들이 웹 개발에서 정말 자주 등장해요.