PHP: Подробное руководство по объединению массивов
Функция PHP array_merge() — это мощный инструмент для объединения массивов в один массив. Эта функция принимает в качестве аргументов два или более массива и объединяет их в один массив, при этом значения из более поздних массивов перезаписывают значения из предыдущих массивов, если ключи совпадают. Примечание: в PHP 8 передача в array_merge() аргументов, не являющихся массивами, вызовет TypeError. В этом руководстве мы подробно разберём функцию array_merge(), изучив её различные варианты использования и применения.
Базовое использование array_merge()
Базовое использование функции array_merge() довольно простое. Просто передайте два или более массива в качестве аргументов, и функция вернёт новый массив, являющийся результатом объединения массивов. Вот пример:
Пример функции PHP array_merge
<?php
$array1 = ["color" => "red", 2, 4];
$array2 = ["a", "b", "color" => "green", "shape" => "rectangle", 4];
$result = array_merge($array1, $array2);
print_r($result);
?>Вывод:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => rectangle
[4] => 4
)Как видите, значения из $array2 перезаписывают значения из $array1, когда у них совпадает ключ.
Объединение многомерных массивов
Функцию array_merge() также можно использовать для объединения многомерных массивов. Чтобы объединить многомерные массивы, просто передайте каждый массив в качестве аргумента функции. Вот пример:
PHP Объединение многомерных массивов с использованием array_merge_recursive
<?php
$array1 = ["color" => ["favorite" => "red"], 2, 4];
$array2 = ["a", "b", "color" => ["favorite" => "green"], "shape" => "rectangle", 4];
$result = array_merge($array1, $array2);
print_r($result);
?>Вывод:
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
$array1 = ["a", "b", "c"];
$array2 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$result = array_merge($array1, $array2);
print_r($result);
?>Вывод:
Array
(
[0] => a
[1] => b
[2] => c
[a] => apple
[b] => banana
[c] => cherry
)Как видите, значения из обоих массивов объединяются. Поскольку ключи имеют разные типы (числовые и строковые), перезаписи не происходит. Это важная деталь, которую следует помнить при объединении массивов с разными типами ключей.
Объединение ассоциативного массива с индексированным массивом
Результат объединения ассоциативного массива с индексированным массивом аналогичен. Значения объединяются, а ключи сохраняются в соответствии со своим типом. Вот пример:
PHP объединение ассоциативного массива с индексированным массивом с использованием функции array_merge
<?php
$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["a", "b", "c"];
$result = array_merge($array1, $array2);
print_r($result);
?>Вывод:
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?