PHP

Recursively Merge Multiple PHP Arrays

Learn to merge PHP arrays recursively, handling nested structures with `array_merge_recursive()`. Ideal for combining configuration settings or complex data objects while preserving depth.

<?php

$config1 = [
    'database' => [
        'host' => 'localhost',
        'port' => 3306
    ],
    'settings' => [
        'debug' => true
    ]
];

$config2 = [
    'database' => [
        'user' => 'admin',
        'pass' => 'secret'
    ],
    'settings' => [
        'debug' => false,
        'logging' => true
    ]
];

$mergedConfig = array_merge_recursive($config1, $config2);

print_r($mergedConfig);
/* Expected Output:
Array
(
    [database] => Array
        (
            [host] => localhost
            [port] => 3306
            [user] => admin
            [pass] => secret
        )

    [settings] => Array
        (
            [debug] => Array
                (
                    [0] => 1
                    [1] =>
                )

            [logging] => 1
        )

)
Note: For non-array values with same key, array_merge_recursive creates an array of values.
Consider custom recursive merge for overwriting behavior.
*/

// Custom recursive merge for overwriting scalar values
function array_merge_recursive_overwrite(array &$array1, array &$array2) {
    $merged = $array1;
    foreach ($array2 as $key => &$value) {
        if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
            $merged[$key] = array_merge_recursive_overwrite($merged[$key], $value);
        } else {
            $merged[$key] = $value;
        }
    }
    return $merged;
}

$mergedConfigOverwrite = array_merge_recursive_overwrite($config1, $config2);
print_r($mergedConfigOverwrite);
/* Expected Output for custom function:
Array
(
    [database] => Array
        (
            [host] => localhost
            [port] => 3306
            [user] => admin
            [pass] => secret
        )

    [settings] => Array
        (
            [debug] =>
            [logging] => 1
        )

)
*/

?>
How it works: The `array_merge_recursive()` function merges elements or arrays from one or more arrays such that if a key exists in both, and the value is an array, it merges those arrays recursively. If the values are non-array types and have the same string key, the values are appended into a new array. This is useful for combining multi-level configuration arrays or deeply nested data structures. A custom function is also shown to demonstrate how to achieve an 'overwrite' behavior for scalar values when keys conflict, which is often desired in configuration merging.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs