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

В PHP работа с массивами является распространенной задачей, и иногда вам может потребоваться объединить несколько массивов, включая многомерные, в один массив. Этот процесс, известный как слияние массивов, позволяет объединять элементы разных массивов в новый массив. В этой статье мы рассмотрим различные методы объединения многоуровневых массивов в PHP, а также приведем примеры кода, иллюстрирующие каждый подход.

Метод 1: использование array_merge_recursive()
Функция array_merge_recursive() — это встроенная функция PHP, которая рекурсивно объединяет два или более массивов. Он просматривает входные массивы и объединяет их значения в новый массив, создавая массив массивов, если обнаружены повторяющиеся ключи. Вот пример:

$array1 = ['key1' => ['value1'], 'key2' => ['value2']];
$array2 = ['key1' => ['value3'], 'key2' => ['value4']];
$result = array_merge_recursive($array1, $array2);
print_r($result);

Выход:

Array
(
    [key1] => Array
        (
            [0] => value1
            [1] => value3
        )
    [key2] => Array
        (
            [0] => value2
            [1] => value4
        )
)

Метод 2: использование оператора «+».
PHP позволяет использовать оператор «+» для объединения массивов. При использовании этого оператора, если встречаются повторяющиеся ключи, значение из правого массива перезапишет значение из левого массива. Вот пример:

$array1 = ['key1' => ['value1'], 'key2' => ['value2']];
$array2 = ['key1' => ['value3'], 'key2' => ['value4']];
$result = $array1 + $array2;
print_r($result);

Выход:

Array
(
    [key1] => Array
        (
            [0] => value1
        )
    [key2] => Array
        (
            [0] => value2
        )
)

Метод 3: рекурсивная пользовательская функция
Если вы предпочитаете собственный подход, вы можете создать рекурсивную функцию для объединения многомерных массивов. Этот метод дает вам больше контроля над процессом слияния. Вот пример:

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;
}
$array1 = ['key1' => ['value1'], 'key2' => ['value2']];
$array2 = ['key1' => ['value3'], 'key2' => ['value4']];
$result = array_merge_recursive_custom($array1, $array2);
print_r($result);

Выход:

Array
(
    [key1] => Array
        (
            [0] => value1
            [1] => value3
        )
    [key2] => Array
        (
            [0] => value2
            [1] => value4
        )
)

В этой статье мы рассмотрели три различных метода объединения многоуровневых массивов в PHP. Функция array_merge_recursive()— это самая простая встроенная опция, а использование оператора «+» обеспечивает быстрый способ объединения массивов, при этом значения правого массива имеют приоритет. Если вам нужен больший контроль над процессом слияния, гибким подходом будет реализация рекурсивной пользовательской функции. Используя эти методы, вы можете эффективно объединять многомерные массивы в PHP и с легкостью обрабатывать сложные структуры данных.

Не забудьте выбрать наиболее подходящий метод, исходя из ваших конкретных требований и структуры ваших массивов. Приятного кодирования!