Слияние многоуровневого массива PHP: методы и примеры кода

Для объединения многоуровневых массивов в PHP можно использовать различные методы. Вот несколько вариантов с примерами кода:

Метод 1: использование array_merge_recursive()

$array1 = [
    'key1' => 'value1',
    'key2' => [
        'subkey1' => 'subvalue1',
        'subkey2' => 'subvalue2',
    ],
];
$array2 = [
    'key2' => [
        'subkey2' => 'updated value',
        'subkey3' => 'subvalue3',
    ],
    'key3' => 'value3',
];
$mergedArray = array_merge_recursive($array1, $array2);
print_r($mergedArray);

Выход:

Array
(
    [key1] => value1
    [key2] => Array
        (
            [subkey1] => subvalue1
            [subkey2] => Array
                (
                    [0] => subvalue2
                    [1] => updated value
                )
            [subkey3] => subvalue3
        )
    [key3] => value3
)

Метод 2. Использование собственной рекурсивной функции

function array_merge_recursive_custom($array1, $array2) {
    foreach ($array2 as $key => $value) {
        if (is_array($value) && isset($array1[$key]) && is_array($array1[$key])) {
            $array1[$key] = array_merge_recursive_custom($array1[$key], $value);
        } else {
            $array1[$key] = $value;
        }
    }
    return $array1;
}
$mergedArray = array_merge_recursive_custom($array1, $array2);
print_r($mergedArray);

Выход:

Array
(
    [key1] => value1
    [key2] => Array
        (
            [subkey1] => subvalue1
            [subkey2] => updated value
            [subkey3] => subvalue3
        )
    [key3] => value3
)

Способ 3: использование оператора «+» (только для двухуровневых массивов)

$array1 = [
    'key1' => 'value1',
    'key2' => [
        'subkey1' => 'subvalue1',
        'subkey2' => 'subvalue2',
    ],
];
$array2 = [
    'key2' => [
        'subkey2' => 'updated value',
        'subkey3' => 'subvalue3',
    ],
    'key3' => 'value3',
];
$mergedArray = $array1 + $array2;
print_r($mergedArray);

Выход:

Array
(
    [key1] => value1
    [key2] => Array
        (
            [subkey1] => subvalue1
            [subkey2] => subvalue2
        )
    [key3] => value3
)