PHP의 array_merge_recursive() 함수는 하나 이상의 배열을 재귀적으로(recursively) 병합하여 하나의 배열로 만들어 주는 함수입니다.
이 함수가 array_merge() 함수와 다른 점은 키(key) 충돌이 발생했을 때 드러납니다. 두 개 이상의 배열에 동일한 키가 존재하면, array_merge_recursive()는 해당 값들을 덮어쓰지 않고 하나의 배열로 묶어 보존합니다. 반면 array_merge()는 같은 상황에서 마지막(나중에 입력된) 값으로 기존 값을 덮어써 버립니다.
문법(Syntax)
array_merge_recursive(arr1, arr2, arr3, …)
매개변수(Parameters)
arr1 − 병합의 기준이 되는 초기 배열
arr2 − 병합할 또 다른 배열
arr3 − 병합할 추가적인 배열 (필요한 만큼 여러 개 전달 가능)
반환값(Return)
array_merge_recursive() 함수는 매개변수로 전달된 모든 배열의 요소들이 병합된 하나의 배열을 반환합니다. 동일한 키를 가진 값들은 개별 요소가 아니라 중첩된 배열 형태로 함께 저장됩니다.
다음 예제는 두 번째 배열에서 첫 번째 배열과 키가 겹치는 경우를 보여줍니다. 이때 array_merge_recursive()는 해당 값을 하나의 배열로 만들어 처리합니다.
예제(Example)
<?php
$arr1 = array("p"=>"one","q"=>"two");
$arr2 = array("q"=>"three","r"=>"four");
print_r(array_merge_recursive($arr1,$arr2));
?>출력 결과(Output)
Array
(
[p] => one
[q] => Array
(
[0] => two
[1] => three
)
[r] => four
)
정리
위 실행 결과를 보면, 두 배열 모두에 존재하는 키 'q'의 값들이 'two'와 'three'로 사라지지 않고 하나의 배열 안에 순서대로 저장된 것을 확인할 수 있습니다. 반복되는 키의 데이터를 모두 유지해야 하는 경우에는 array_merge() 대신 array_merge_recursive()를 사용하는 것이 적합합니다.