Перейти к содержимому

PHP: Подробное руководство по объединению массивов

Функция PHP array_merge() — это мощный инструмент для объединения массивов в один массив. Эта функция принимает в качестве аргументов два или более массива и объединяет их в один массив, при этом значения из более поздних массивов перезаписывают значения из предыдущих массивов, если ключи совпадают. Примечание: в PHP 8 передача в array_merge() аргументов, не являющихся массивами, вызовет TypeError. В этом руководстве мы подробно разберём функцию array_merge(), изучив её различные варианты использования и применения.

Базовое использование array_merge()

Базовое использование функции array_merge() довольно простое. Просто передайте два или более массива в качестве аргументов, и функция вернёт новый массив, являющийся результатом объединения массивов. Вот пример:

Пример функции PHP array_merge

php
<?php

$array1 = ["color" => "red", 2, 4];
$array2 = ["a", "b", "color" => "green", "shape" => "rectangle", 4];
$result = array_merge($array1, $array2);
print_r($result);

?>

Вывод:

console
Array
(
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => rectangle
    [4] => 4
)

Как видите, значения из $array2 перезаписывают значения из $array1, когда у них совпадает ключ.

Объединение многомерных массивов

Функцию array_merge() также можно использовать для объединения многомерных массивов. Чтобы объединить многомерные массивы, просто передайте каждый массив в качестве аргумента функции. Вот пример:

PHP Объединение многомерных массивов с использованием array_merge_recursive

php
<?php

$array1 = ["color" => ["favorite" => "red"], 2, 4];
$array2 = ["a", "b", "color" => ["favorite" => "green"], "shape" => "rectangle", 4];
$result = array_merge($array1, $array2);
print_r($result);

?>

Вывод:

console
Array
(
    [color] => Array
        (
            [favorite] => green
        )
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => rectangle
    [4] => 4
)

Обратите внимание, что array_merge() может объединять многомерные массивы, но при этом она перезапишет вложенные массивы с одинаковым ключом. Чтобы добавлять вложенные массивы вместо их перезаписи, используйте array_merge_recursive().

Объединение индексированного массива с ассоциативным массивом

При объединении индексированного массива с ассоциативным массивом значения из обоих массивов объединяются. Вот пример:

PHP Пример объединения индексированного массива с ассоциативным массивом с помощью функции array_merge

php
<?php

$array1 = ["a", "b", "c"];
$array2 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$result = array_merge($array1, $array2);
print_r($result);

?>

Вывод:

console
Array
(
    [0] => a
    [1] => b
    [2] => c
    [a] => apple
    [b] => banana
    [c] => cherry
)

Как видите, значения из обоих массивов объединяются. Поскольку ключи имеют разные типы (числовые и строковые), перезаписи не происходит. Это важная деталь, которую следует помнить при объединении массивов с разными типами ключей.

Объединение ассоциативного массива с индексированным массивом

Результат объединения ассоциативного массива с индексированным массивом аналогичен. Значения объединяются, а ключи сохраняются в соответствии со своим типом. Вот пример:

PHP объединение ассоциативного массива с индексированным массивом с использованием функции array_merge

php
<?php

$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["a", "b", "c"];
$result = array_merge($array1, $array2);
print_r($result);

?>

Вывод:

console
Array
(
    [a] => apple
    [b] => banana
    [c] => cherry
    [0] => a
    [1] => b
    [2] => c
)

Как показано выше, значения объединяются без конфликта. Строковые ключи из $array1 сохраняются, а числовые ключи из $array2 перенумеровываются, начиная с 0.

Соображения по производительности

Функция array_merge() имеет линейную временную сложность, что означает: время, необходимое для объединения массивов, линейно увеличивается с ростом их размера. По этой причине важно свести количество объединяемых массивов к минимуму и избегать использования этой функции для чрезвычайно больших массивов.

Заключение

Функция array_merge() — это универсальный инструмент для объединения массивов в PHP. Независимо от того, объединяете ли вы плоские массивы, многомерные массивы, индексированные массивы или ассоциативные массивы, эта функция справится с задачей. Учитывая её линейную временную сложность, важно по возможности уменьшать размер объединяемых массивов, но при правильном подходе эта функция может стать незаменимым инструментом в вашем наборе PHP-инструментов.

Практика

Что верно в отношении функции array_merge в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.