본문 바로가기
PHP

[PHP] array_replace_recursive() 로 중첩 배열 덮어쓰기

by teamnova 2025. 6. 15.
728x90

안녕하세요, 

 

오늘은 배열 안의 값들을 덮어쓸 수 있는  array_replace_recursive() 함수에 대해 알아보겠습니다. 

 

array_replace_recursive()

array_replace_recursive() 함수는 PHP에서 여러 배열을 재귀적으로 병합하면서 기존 값을 덮어쓰는 함수입니다.

특히, 다차원 배열을 다룰 때 유용하게 쓰입니다. 

array_replace_recursive(array $array1, array ...$arrays): array

 

- $array1: 기준이 되는 기본 배열
- $arrays: 하나 이상 추가 배열 (덮어씌울 대상)
- 동일한 키가 있을 경우, 후속 배열의 값이 앞 배열의 값을 덮어씀
- 만약 그 키의 값이 배열이면 재귀적으로 안쪽까지 들어가서 병합

 

 

예시 

<?php
// 기본 캐릭터 설정
$defaultCharacter = [
    'name' => '이름없음',
    'stats' => [
        'hp' => 100,
        'mp' => 50,
        'attack' => 10,
        'defense' => 5
    ],
    'equipment' => [
        'weapon' => '나무검',
        'armor' => '천옷'
    ]
];


// 사용자가 설정한 값 (일부만 덮어쓰기)
$userSetting = [
    'name' => '기사Z',
    'stats' => [
        'hp' => 150,       // HP 수정
        'attack' => 25     // 공격력 수정
    ],
    'equipment' => [
        'weapon' => '강철검' // 무기만 변경
    ]
];


// array_replace_recursive()를 이용해 덮어쓰기

$finalCharacter = array_replace_recursive($defaultCharacter, $userSetting);

// 결과 출력
echo "<br>defaultCharacter<br>";
print_r($defaultCharacter);

echo "<br>userSetting<br>";
print_r($userSetting);


echo "<br>finalCharacter<br>";
print_r($finalCharacter);
?>

 

결과

defaultCharacter
Array ( [name] => 이름없음 [stats] => Array ( [hp] => 100 [mp] => 50 [attack] => 10 [defense] => 5 ) [equipment] => Array ( [weapon] => 나무검 [armor] => 천옷 ) )
userSetting
Array ( [name] => 기사Z [stats] => Array ( [hp] => 150 [attack] => 25 ) [equipment] => Array ( [weapon] => 강철검 ) )
finalCharacter
Array ( [name] => 기사Z [stats] => Array ( [hp] => 150 [mp] => 50 [attack] => 25 [defense] => 5 ) [equipment] => Array ( [weapon] => 강철검 [armor] => 천옷 ) )