PHP
Recursively Merge Multiple Associative Arrays
Master how to deeply merge multiple associative arrays in PHP, handling nested structures gracefully, ideal for configuration management or combining complex data.
$array1 = ['a' => 1, 'b' => ['b1' => 10, 'b2' => 20], 'c' => 3];
$array2 = ['b' => ['b1' => 100, 'b3' => 30], 'd' => 4];
$array3 = ['e' => 5, 'b' => ['b1' => 50]]; // Overwrites b1 again
// Using array_merge_recursive - note how it handles scalar values with same keys
$mergedRecursive = array_merge_recursive($array1, $array2, $array3);
echo "array_merge_recursive output:
";
print_r($mergedRecursive);
/*
Output for array_merge_recursive:
Array
(
[a] => 1
[b] => Array
(
[b1] => Array
(
[0] => 10
[1] => 100
[2] => 50
)
[b2] => 20
[b3] => 30
)
[c] => 3
[d] => 4
[e] => 5
)
*/
// A custom recursive merge function to override scalar values
function array_merge_deep(array ...$arrays) {
$merged = [];
foreach ($arrays as $array) {
foreach ($array as $key => $value) {
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
$merged[$key] = array_merge_deep($merged[$key], $value);
} else {
$merged[$key] = $value;
}
}
}
return $merged;
}
$mergedCustom = array_merge_deep($array1, $array2, $array3);
echo "
array_merge_deep output:
";
print_r($mergedCustom);
/*
Output for array_merge_deep:
Array
(
[a] => 1
[b] => Array
(
[b1] => 50
[b2] => 20
[b3] => 30
)
[c] => 3
[d] => 4
[e] => 5
)
*/
How it works: This snippet illustrates two approaches to merging arrays recursively. `array_merge_recursive()` merges elements recursively but creates new arrays for scalar values that share the same key across merged arrays. A custom `array_merge_deep()` function is provided, which offers a more common 'override' behavior for scalar values at identical keys within nested arrays, making it ideal for merging configuration settings or deep data structures where later values should supersede earlier ones.