728x90
안녕하세요,
오늘은 array_merge와 + 연산자로 두 배열 합칠때의 차이점을 알아보도록 하겠습니다.
PHP에서 두 배열을 합쳐야 할 때, array_merge() 함수와 + (배열 합집합 연산자) 를 사용할 수 있습니다.
그러나 이 둘은 키(Key)를 다루는 방식에서 차이가 있습니다.
특히 숫자 키(Numeric Key)를 만났을 때 완전히 다르게 동작하니 주의해야 합니다.
- array_merge():
- 배열을 뒤에 덧붙이고, 겹치는 문자열 키는 덮어씁니다.
- 숫자 키는 전부 무시하고 새로 색인(re-index)합니다.
- + (합집합):
- 먼저 나온 키를 무조건 유지합니다.
- 겹치는 키(숫자든 문자열이든)는 나중에 나온 값을 그냥 무시합니다.
예제 1 - 숫자 키(Numeric Key) 처리 방식 차이
두 배열 모두 [0, 1, 2, ...] 형태의 숫자 키를 가질 때, 두 함수의 동작은 정반대입니다.
<?php
$arr1 = ['a', 'b', 'c']; // [0 => 'a', 1 => 'b', 2 => 'c']
$arr2 = ['d', 'e', 'f']; // [0 => 'd', 1 => 'e', 2 => 'f']
// 1. array_merge() 사용: 키를 새로 만듭니다.
$merged = array_merge($arr1, $arr2);
echo "--- array_merge() 결과 (키가 새로 생성됨) ---\n";
print_r($merged);
// 2. + 연산자 사용: 겹치는 키를 무시합니다.
$unioned = $arr1 + $arr2;
echo "\n--- + 연산자 결과 (겹치는 키 0, 1, 2가 무시됨) ---\n";
print_r($unioned);
?>
결과
--- array_merge() 결과 (키가 새로 생성됨) ---
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
)
--- + 연산자 결과 (겹치는 키 0, 1, 2가 무시됨) ---
Array
(
[0] => a
[1] => b
[2] => c
)
예제 2 - 문자열 키(String Key) 처리: 덮어쓰기 vs 유지하기
문자열 키의 경우, 겹치는 키를 만났을 때의 동작이 또 다릅니다.
<?php
// 기본 설정값 (Defaults)
$defaults = [
'host' => 'localhost',
'user' => 'guest',
'db' => 'main'
];
// 사용자가 입력한 설정값 (userinfo)
$userinfo = [
'user' => 'admin', // 'user'가 겹침
'port' => 3306
];
// 1. array_merge(): 사용자 설정(userinfo)으로 덮어쓰기
$merged = array_merge($defaults, $userinfo);
echo "--- array_merge() 결과 (나중 값 'admin'이 덮어씀) ---\n";
print_r($merged);
// 2. + 연산자: 기본값($defaults)을 유지
$unioned = $defaults + $userinfo;
echo "\n--- + 연산자 결과 (먼저 나온 'guest'가 유지됨) ---\n";
print_r($unioned);
?>
결과
--- array_merge() 결과 (나중 값 'admin'이 덮어씀) ---
Array
(
[host] => localhost
[user] => admin
[db] => main
[port] => 3306
)
--- + 연산자 결과 (먼저 나온 'guest'가 유지됨) ---
Array
(
[host] => localhost
[user] => guest
[db] => main
[port] => 3306
)'PHP' 카테고리의 다른 글
| [PHP] usort()로 '사용자 목록'을 '나이 순'으로 정렬 (0) | 2025.11.06 |
|---|---|
| [PHP] NumberFormatter로 '2000000'을 '이백만'으로 변환하기 (0) | 2025.11.05 |
| [PHP] IteratorAggregate - 루프에서 사용될 때 어떤 이터레이터를 사용할지 위임하기. (0) | 2025.11.03 |
| [PHP] 초성 검색 기능 구현하기 (0) | 2025.11.02 |
| [PHP] sscanf()으로 문자열 파싱하기 (0) | 2025.10.30 |