PHP에서 여러 배열을 하나로 합치는 대표적인 방법은 array_merge() 함수와 '+'(더하기) 연산자입니다. 두 방식 모두 배열의 합집합을 구한다는 점에서 비슷해 보이지만, 내부적으로 동작하는 방식은 완전히 다릅니다. 이 글에서는 두 방식의 차이점을 예제 코드와 함께 살펴보겠습니다.
핵심 차이점 요약
- '+' 연산자: 왼쪽(앞쪽) 배열의 값을 우선합니다. 동일한 키가 양쪽 배열에 모두 존재하면 왼쪽 배열의 값이 유지되고, 오른쪽 배열의 중복 키는 무시됩니다.
- array_merge(): 동일한 문자열(non-numeric) 키가 존재할 경우 나중에 전달된 배열의 값으로 덮어씁니다. 반면 숫자 키는 덮어쓰지 않고 배열 끝에 새로운 요소로 추가됩니다.
예제 1: '+' 연산자로 배열 합치기
먼저 '+' 연산자를 사용하여 두 개의 배열을 병합하는 예제입니다.
<?php
$arr1 = array( "p"=>"150", "q"=>"100", "r"=>"120", "s"=>"110");
$arr2 = array("t"=>"115", "u"=>"103", "v"=>"105", "w"=>"125");
var_dump($arr1 + $arr2);
?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
array(8) {
["p"],>
string(3) "150"
["q"],>
string(3) "100"
["r"],>
string(3) "120"
["s"],>
string(3) "110"
["t"],>
string(3) "115"
["u"],>
string(3) "103"
["v"],>
string(3) "105"
["w"],>
string(3) "125"
}
두 배열 사이에 중복된 키가 없으므로 모든 요소가 그대로 합쳐진 것을 확인할 수 있습니다.
예제 2: array_merge()로 배열 합치기
이번에는 같은 작업을 array_merge() 함수로 수행해 보겠습니다.
<?php
$arr1 = array( "p"=>"150", "q"=>"100", "r"=>"120", "s"=>"110");
$arr2 = array("t"=>"115", "u"=>"110", "v"=>"105", "w"=>"100");
var_dump(array_merge($arr1, $arr2));
?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
array(8) {
["p"],>
string(3) "150"
["q"],>
string(3) "100"
["r"],>
string(3) "120"
["s"],>
string(3) "110"
["t"],>
string(3) "115"
["u"],>
string(3) "110"
["v"],>
string(3) "105"
["w"],>
string(3) "100"
}
정리 및 활용 가이드
만약 두 배열에 동일한 문자열 키가 존재한다면 결과는 크게 달라집니다. array_merge()는 나중에 전달된 배열의 값으로 기존 값을 덮어쓰는 반면, '+' 연산자는 앞쪽 배열의 값을 그대로 유지합니다. 따라서 다음과 같은 기준으로 선택하는 것이 좋습니다.
- 중복 키의 값을 새 값으로 갱신하고 싶다면 →
array_merge() - 기존(왼쪽) 배열의 값을 보존하고 싶다면 →
'+'연산자
숫자 인덱스 배열을 단순히 이어 붙일 때도 array_merge()는 인덱스를 재배열하며 추가하는 반면, '+' 연산자는 왼쪽 배열의 인덱스를 우선하므로 상황에 맞게 적절한 방식을 선택하시기 바랍니다.