Как объединить два массива в PHP без array_push и оператора +
Использование array_merge для объединения массивов
Отличный вопрос! Для вашей задачи идеально подходит функция array_merge(). Она создаёт новый массив, добавляя элементы второго массива в конец первого. В отличие от оператора +, array_merge() перезаписывает строковые ключи из первого массива, если они совпадают с ключами из второго, а числовые ключи просто перенумеровывает, начиная с нуля.
Вот как это работает для вашего примера:
<?php
$baseArray = ['apple', 'banana', 'orange'];
$additionalArray = ['grape', 'kiwi', 'banana'];
$result = array_merge($baseArray, $additionalArray);
print_r($result);
/*
Array
(
[0] => apple
[1] => banana
[2] => orange
[3] => grape
[4] => kiwi
[5] => banana
)
*/
?>
Как видите, все элементы второго массива добавлены в конец, даже повторяющиеся значения (banana). Это именно то, что вам нужно.
Важные нюансы array_merge
- Числовые ключи: Если в массивах есть числовые ключи,
array_merge()переиндексирует их, начиная с 0. Это может быть нежелательно, если вам нужно сохранить исходные числовые ключи. - Строковые ключи: При совпадении строковых ключей значение из второго массива заменяет значение из первого. Если вам нужно сохранить оба значения, нужно использовать другой подход.
- Производительность:
array_merge()работает быстро и эффективно, даже с большими массивами. Это предпочтительный способ объединения массивов в большинстве случаев.
Альтернативы array_merge
Если по какой-то причине array_merge() не подходит, можно использовать array_push() с распаковкой массива через оператор ... (spread operator), доступный с PHP 7.4:
<?php
$baseArray = ['apple', 'banana', 'orange'];
$additionalArray = ['grape', 'kiwi', 'banana'];
array_push($baseArray, ...$additionalArray);
print_r($baseArray);
// Результат тот же: ['apple', 'banana', 'orange', 'grape', 'kiwi', 'banana']
?>
Этот способ модифицирует исходный массив, а не создаёт новый, что может быть полезно для экономии памяти. Однако он менее читаем, чем array_merge(), и требует PHP 7.4 или новее.
Также можно использовать цикл foreach для добавления элементов по одному, но это менее эффективно и не рекомендуется для больших массивов.
В итоге, для вашей задачи array_merge() — это самый правильный и производительный вариант. Используйте его, когда нужно объединить два или более массивов в один.
Использование оператора += для объединения массивов с сохранением ключей
Если вам нужно объединить массивы, но при этом сохранить числовые ключи (не переиндексировать их), можно использовать оператор +=. Однако, в отличие от array_merge(), он не добавляет элементы с уже существующими ключами.
Пример:
<?php
$baseArray = [0 => 'apple', 1 => 'banana'];
$additionalArray = [0 => 'grape', 1 => 'kiwi'];
$result = $baseArray + $additionalArray;
print_r($result);
/*
Array
(
[0] => apple
[1] => banana
)
*/
?>
Как видите, элементы второго массива не были добавлены, потому что ключи 0 и 1 уже существуют в первом массиве. Этот подход полезен, когда вы работаете с ассоциативными массивами и хотите гарантировать, что значения из первого массива не будут перезаписаны.
Если вам нужно добавить элементы с числовыми ключами, не переиндексируя их, лучше использовать цикл или array_merge() с последующей ручной корректировкой ключей. Но для большинства задач array_merge() остаётся лучшим выбором.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги