
array_merge_recursive 함수는 중첩된 배열을 병합하는 데 문제가 있습니다. 이는 함수가 중첩된 배열을 병합할 때, 기존의 값을 덮어쓰기 때문입니다.
예를 들어, 다음 두 개의 배열을 병합할 때 다음과 같이 중첩된 배열이 병합되지 않습니다.
#hostingforum.kr
php
$array1 = array(
'key1' => 'value1',
'key2' => array(
'key21' => 'value21',
'key22' => 'value22'
)
);
$array2 = array(
'key2' => array(
'key22' => 'newValue22',
'key23' => 'value23'
)
);
$array3 = array_merge_recursive($array1, $array2);
이 경우, `$array3`의 결과는 다음과 같습니다.
#hostingforum.kr
php
array(
'key1' => 'value1',
'key2' => array(
'key21' => 'value21',
'key22' => 'value22',
'key23' => 'value23'
)
)
그러나 나는 `$array3`의 결과가 다음과 같이 중첩된 배열이 병합되어야 한다고 생각합니다.
#hostingforum.kr
php
array(
'key1' => 'value1',
'key2' => array(
'key21' => 'value21',
'key22' => 'newValue22',
'key23' => 'value23'
)
)
이 문제를 해결하는 방법은 array_merge_recursive 함수 대신 array_merge 함수를 사용하는 것입니다. array_merge 함수는 중첩된 배열을 병합할 때, 기존의 값을 덮어쓰지 않습니다.
#hostingforum.kr
php
$array3 = array_merge($array1, $array2);
이 경우, `$array3`의 결과는 다음과 같이 중첩된 배열이 병합되어야 합니다.
#hostingforum.kr
php
array(
'key1' => 'value1',
'key2' => array(
'key21' => 'value21',
'key22' => 'newValue22',
'key23' => 'value23'
)
)
또한, PHP 7.4 이상에서는 array_merge 함수에 recursive 옵션을 추가할 수 있습니다. 이 옵션을 사용하면 array_merge 함수가 중첩된 배열을 병합할 때, 기존의 값을 덮어쓰지 않습니다.
#hostingforum.kr
php
$array3 = array_merge_recursive($array1, $array2, true);
이 경우, `$array3`의 결과는 다음과 같이 중첩된 배열이 병합되어야 합니다.
#hostingforum.kr
php
array(
'key1' => 'value1',
'key2' => array(
'key21' => 'value21',
'key22' => 'newValue22',
'key23' => 'value23'
)
)
2025-05-17 00:00