PHP에서 배열을 다룰 때 두 개 이상의 배열을 합쳐야 하는 경우가 자주 발생합니다.
예를 들면, 데이터를 동적으로 추가하거나, 여러 개의 설정 배열을 하나로 합치거나, 사용자 입력 데이터를 병합할 때 유용하게 사용됩니다.
이러한 기능을 수행하는 대표적인 함수가 바로 array_merge() 입니다.
이 글에서는 PHP array_merge() 함수의 사용법, 다양한 활용 예제, 유용한 팁과 주의사항을 체계적으로 정리하겠습니다.
1. array_merge() 함수란?
✅ 기본 문법
array array_merge(array ...$arrays)
✅ 매개변수 설명
매개변수 설명
$arrays | 합칠 배열들 (2개 이상 가능) |
✅ 반환값
- 주어진 배열들을 하나의 배열로 병합하여 반환
- 숫자 키는 새로 부여되고, 문자열 키는 덮어쓰기됨
2. array_merge() 기본 예제
🔹 두 개의 배열 병합
<?php
$array1 = ["Apple", "Banana"];
$array2 = ["Cherry", "Grape"];
$result = array_merge($array1, $array2);
print_r($result);
?>
🔹 실행 결과
Array
(
[0] => Apple
[1] => Banana
[2] => Cherry
[3] => Grape
)
➡ 두 배열이 하나로 합쳐졌으며, 인덱스는 0부터 새롭게 부여됨.
🔹 숫자 키가 있는 배열 병합
<?php
$array1 = [0 => "Apple", 1 => "Banana"];
$array2 = [2 => "Cherry", 3 => "Grape"];
$result = array_merge($array1, $array2);
print_r($result);
?>
🔹 실행 결과
Array
(
[0] => Apple
[1] => Banana
[2] => Cherry
[3] => Grape
)
➡ 숫자 키가 있더라도 array_merge()는 키를 새롭게 부여.
🔹 문자열 키가 있는 배열 병합
<?php
$array1 = ["name" => "John", "age" => 25];
$array2 = ["age" => 30, "city" => "New York"];
$result = array_merge($array1, $array2);
print_r($result);
?>
🔹 실행 결과
Array
(
[name] => John
[age] => 30
[city] => New York
)
➡ array_merge()는 문자열 키가 중복될 경우 후속 배열 값으로 덮어쓰기합니다.
🔹 다차원 배열 병합
<?php
$array1 = ["fruits" => ["Apple", "Banana"]];
$array2 = ["fruits" => ["Cherry", "Grape"]];
$result = array_merge($array1, $array2);
print_r($result);
?>
🔹 실행 결과
Array
(
[fruits] => Array
(
[0] => Cherry
[1] => Grape
)
)
➡ array_merge()는 다차원 배열을 병합할 때 덮어쓰기 방식으로 동작하므로, 기존 데이터가 유지되지 않습니다.
3. array_merge()의 실용적인 활용 예제
🔹 1) 설정 파일 병합
<?php
$defaultConfig = ["theme" => "light", "language" => "en"];
$userConfig = ["language" => "fr", "timezone" => "UTC"];
$config = array_merge($defaultConfig, $userConfig);
print_r($config);
?>
🔹 실행 결과
Array
(
[theme] => light
[language] => fr
[timezone] => UTC
)
➡ 사용자 설정이 기본 설정을 덮어쓰는 방식으로 적용됩니다.
🔹 2) 사용자 입력 데이터와 기본 데이터 병합
<?php
$defaultData = ["name" => "Guest", "role" => "user"];
$userInput = ["name" => "Alice"];
$finalData = array_merge($defaultData, $userInput);
print_r($finalData);
?>
🔹 실행 결과
Array
(
[name] => Alice
[role] => user
)
➡ 기본 데이터를 유지하면서, 사용자가 입력한 데이터를 적용할 수 있습니다.
🔹 3) 여러 개의 배열 한 번에 병합
<?php
$array1 = ["Apple", "Banana"];
$array2 = ["Cherry"];
$array3 = ["Grape", "Orange"];
$result = array_merge($array1, $array2, $array3);
print_r($result);
?>
➡ array_merge()는 여러 개의 배열을 한 번에 병합할 수 있습니다.
🔹 4) 다차원 배열 유지하면서 병합 (array_merge_recursive())
<?php
$array1 = ["fruits" => ["Apple", "Banana"]];
$array2 = ["fruits" => ["Cherry", "Grape"]];
$result = array_merge_recursive($array1, $array2);
print_r($result);
?>
🔹 실행 결과
Array
(
[fruits] => Array
(
[0] => Apple
[1] => Banana
[2] => Cherry
[3] => Grape
)
)
➡ array_merge_recursive()는 덮어쓰기 대신 배열을 병합하여 기존 데이터를 유지할 수 있습니다.
4. array_merge()와 다른 배열 함수 비교
함수 설명
array_merge() | 배열을 병합하고, 숫자 키는 재정렬, 문자열 키는 덮어쓰기 |
array_merge_recursive() | 다차원 배열을 병합하며, 같은 키 값이 있으면 배열로 묶음 |
array_replace() | 덮어쓰기 방식이지만, 숫자 키도 유지됨 |
+ 연산자 | 배열을 병합하지만, 덮어쓰지 않고 기존 값을 유지 |
✅ + 연산자와의 차이점
<?php
$array1 = ["name" => "John", "age" => 25];
$array2 = ["age" => 30, "city" => "New York"];
$result = $array1 + $array2;
print_r($result);
?>
🔹 실행 결과
Array
(
[name] => John
[age] => 25
[city] => New York
)
➡ + 연산자는 기존 키 값을 유지하고 덮어쓰지 않음.
➡ 덮어쓰려면 array_merge()를 사용해야 함.
5. array_merge() 사용 시 주의할 점
✅ 숫자 키는 덮어쓰기되지 않고 새롭게 할당됨
<?php
$array1 = [10 => "A"];
$array2 = [20 => "B"];
print_r(array_merge($array1, $array2));
?>
➡ 기존 키 값이 유지되지 않고, 0부터 다시 할당됩니다.
✅ 문자열 키는 덮어쓰기됨
<?php
$array1 = ["key" => "A"];
$array2 = ["key" => "B"];
print_r(array_merge($array1, $array2));
?>
➡ "key" => "B"가 최종 결과로 남음.
✅ 다차원 배열을 병합할 때는 array_merge_recursive() 사용 ➡ 기존 배열을 덮어쓰지 않으려면 array_merge_recursive()를 사용해야 합니다.
6. 결론
PHP의 array_merge() 함수는 배열을 병합하는 가장 강력한 함수입니다.
이를 활용하면 설정 파일 병합, 사용자 입력 데이터 적용, 다차원 배열 처리 등을 효율적으로 수행할 수 있습니다.
📌 핵심 요약
✔️ 숫자 키는 새롭게 할당, 문자열 키는 덮어쓰기
✔️ 여러 개의 배열을 한 번에 병합 가능
✔️ 다차원 배열은 array_merge_recursive() 사용
✔️ 기존 키 값을 유지하려면 + 연산자 사용
이제 array_merge()를 활용하여 더욱 효율적인 PHP 개발을 해보세요! 🚀
💡 도움이 되셨다면 공유해주세요! 😊
'💻 자주 쓰는 PHP 함수' 카테고리의 다른 글
[PHP 함수] explode() 함수로 문자열을 배열로 변환하기 (18) | 2025.03.21 |
---|---|
[PHP 함수] strpos()로 문자열 찾기 (12) | 2025.03.20 |
[PHP 함수] substr() 함수로 문자열 자르기 (0) | 2025.03.19 |
[PHP 함수] sprintf() 함수 완벽 가이드 (2) | 2025.03.19 |
[PHP 함수] dirname() 함수로 디렉토리 정보 다루기 (6) | 2025.03.18 |