PHP로 개발하다 보면 여러 개의 배열을 하나로 합쳐야 하는 상황이 자주 발생하거든요. 이때 보통 array_merge 함수를 사용하지만, 상황에 따라 + 연산자를 사용하는 경우도 있더라고요. 그런데 이 두 방식은 특히 배열의 키가 중복될 때 처리하는 방식이 완전히 다르기 때문에, 어떤 상황에서 어떤 방식을 선택해야 할지 정확히 구분할 필요가 있어요.
먼저 array_merge 함수는 여러 배열을 합쳐서 하나의 새로운 배열을 반환하는 역할을 수행해요. 이 함수의 가장 큰 특징은 키 타입에 따라 동작이 갈린다는 점이에요. 문자열 키가 겹치면 뒤에 오는 배열의 값이 앞선 값을 덮어쓰고, 숫자 키는 절대 덮어쓰지 않아요. 숫자 키 요소는 키가 겹쳐도 모두 뒤에 이어 붙이고 결과의 숫자 키는 0부터 다시 매겨진답니다. 따라서 숫자 키 배열에서는 나중에 입력된 데이터가 갱신되지 않고 추가만 되는 거예요.
<?php
$array1 = [1 => 'apple', 2 => 'banana'];
$array2 = [2 => 'cherry', 3 => 'date'];
// array_merge를 사용한 경우
$result1 = array_merge($array1, $array2);
// 결과: [0 => 'apple', 1 => 'banana', 2 => 'cherry', 3 => 'date']
// numeric 키는 재인덱싱되며, 2번 키가 뒤의 값으로 덮어씌워지지 않음
?>
반면 + 연산자를 사용하여 배열을 합치는 방식은 연합의 성격이 강하며, 이는 PHP 내부에서 배열을 결합할 때 아주 고전적인 방식이기도 해요. 이 방식은 동일한 키가 양쪽 배열에 존재할 경우, 앞에 위치한 배열의 값을 그대로 유지하고 뒤에 오는 배열의 값은 무시해버리는 특성이 있더라고요. 즉, 뒤에 오는 데이터가 아무리 정확하더라도 앞선 데이터가 이미 자리를 차지하고 있으면 덮어쓰지 않는 구조예요. 이 때문에 특정 조건에서 데이터가 업데이트되지 않는 버그가 발생할 수 있으니 상황에 맞는 선택이 중요해 보여요.
<?php
$array1 = [1 => 'apple', 2 => 'banana'];
$array2 = [2 => 'cherry', 3 => 'date'];
// + 연산자를 사용한 경우
$result2 = $array1 + $array2;
// 결과: [1 => 'apple', 2 => 'banana', 3 => 'date']
// 2번 키가 앞의 값으로 유지됨
?>
결국 두 방식의 차이는 중복된 키를 어떻게 처리할 것인가의 문제로 귀결되거든요. 문자열 키라면 array_merge가 뒤 값을 우선으로 갱신하지만, 숫자 키라면 array_merge는 재인덱싱하며 추가만 하고 갱신하지 않아요. 숫자 키를 유지한 채 뒤 배열 값으로 덮어쓰고 싶다면 array_replace($array1, $array2)나 $array2 + $array1처럼 쓰는 것이 맞더라고요. 기존 키를 보호하면서 새 요소만 추가하고 싶을 때는 + 연산자를, 문자열 키 갱신이 필요할 때는 array_merge를 의도에 맞춰 선택하면 예측 가능한 코드를 작성할 수 있어요.
'develop > PHP' 카테고리의 다른 글
| PHP Generator 기반 대용량 데이터 처리 (yield) (0) | 2026.10.11 |
|---|---|
| PHP 비밀번호 암호화 및 검증 (password_hash, password_verify) (0) | 2026.10.04 |
| PHP strtotime() 함수와 DateTime 클래스 활용 비교 (0) | 2026.09.21 |
| str_replace와 preg_replace의 용도 구분 (PHP) (0) | 2026.09.21 |
| PHP match 표현식 활용 (PHP 8.0) (0) | 2026.09.21 |