Как сливать два массива в PHP? Разные варианты с примерами

Раздел: Массивы в PHP -> Работа с массивами

Основные способы объединения массивов в PHP

Самым эффективным и часто используемым способом является функция array_merge(). Она создаёт новый массив, содержащий элементы из переданных массивов. При совпадении строковых ключей последнее значение заменяет предыдущее, а числовые ключи переиндексируются.


$first = ['a' => 1, 'b' => 2];
$second = ['b' => 3, 'c' => 4];
$result = array_merge($first, $second);
print_r($result);
  

отсортировать массив по значению php (сортировка массива по значению php)

Array
(
    [a] => 1
    [b] => 3
    [c] => 4
)
  

цикл значений php (цикл по массиву в php)

Типичная ошибка: при работе с числовыми ключами array_merge переиндексирует их, что может нарушить ожидаемую структуру, если ключи имели значение. Для сохранения числовых ключей используйте оператор +.

Как объединить массивы без перезаписи одинаковых строковых ключей?

Применяется оператор +. Он добавляет элементы из второго массива только если ключ отсутствует в первом. Строковые ключи из первого массива не перезаписываются, числовые ключи сохраняются (но при одинаковых числовых ключах остаётся значение первого массива).


$first = ['a' => 1, 'b' => 2];
$second = ['b' => 3, 'c' => 4];
$result = $first + $second;
print_r($result);
  

Php получить индекс (получение индекса массива в php)

Array
(
    [a] => 1
    [b] => 2
    [c] => 4
)
  

Php значение массива в строку (преобразование массива в строку php)

Распространённая проблема: оператор + не работает рекурсивно для вложенных массивов. Если нужно объединить многомерные массивы, используйте array_merge_recursive().

Как рекурсивно объединить вложенные массивы?

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


$first = ['colors' => ['red', 'green']];
$second = ['colors' => ['blue']];
$result = array_merge_recursive($first, $second);
print_r($result);
  

Php есть ли значение в массиве (поиск значения в массиве php)

Array
(
    [colors] => Array
        (
            [0] => red
            [1] => green
            [2] => blue
        )
)
  

Php удалить элемент массива по значению (php удалить элемент массива по значению)

Ошибка: если оба значения не являются массивами, array_merge_recursive не сможет их объединить и выдаст предупреждение. Проверяйте типы данных перед вызовом.

Как объединить массивы с заменой значений по ключу?

Функция array_replace() заменяет значения первого массива значениями второго для одинаковых ключей (строковых и числовых). Если ключ есть только во втором массиве, он добавляется. Не переиндексирует числовые ключи.


$first = [0 => 'apple', 1 => 'banana'];
$second = [0 => 'cherry', 2 => 'date'];
$result = array_replace($first, $second);
print_r($result);
  

Php new array (создание массива в php)

Array
(
    [0] => cherry
    [1] => banana
    [2] => date
)
  

Php массивы получить первый элемент (получение первых элементов массива в php)

Нюанс: array_replace не рекурсивная. Для вложенных массивов используйте array_replace_recursive().

Как объединить массивы с помощью spread-оператора? (PHP 7.4+)

Spread-оператор (...) распаковывает массивы внутри литерала нового массива. Поведение как у array_merge для строковых ключей (перезапись) и числовых (переиндексация). Подходит для объединения двух и более массивов.


$first = ['a' => 1, 'b' => 2];
$second = ['b' => 3, 'c' => 4];
$result = [...$first, ...$second];
print_r($result);
  

Php между значениями (выборка значений массива в диапазоне php)

Array
(
    [a] => 1
    [b] => 3
    [c] => 4
)
  

Php значения ассоциативного массива (получение значений из ассоциативного массива php)

Проблема: spread-оператор не работает с массивами, имеющими строковые ключи, если эти ключи совпадают - последнее значение перезаписывает предыдущее, как и array_merge. Для сохранения всех значений используйте array_merge_recursive().

Как объединить массивы в цикле с произвольной логикой?

Если нужно выполнить объединение с дополнительными условиями (фильтрация, преобразование), удобно использовать цикл foreach.


$first = ['a' => 1, 'b' => 2];
$second = ['b' => 3, 'c' => 4];
$result = $first;
foreach ($second as $key => $value) {
    $result[$key] = $value;
}
print_r($result);
  

Php найти значение в массиве (поиск значения в массиве php)

Array
(
    [a] => 1
    [b] => 3
    [c] => 4
)
  

Php объединить два массива (объединение двух массивов в php)

Риски: если в $first уже есть числовые ключи, они могут быть случайно перезаписаны. Для сохранения числовых ключей используйте array_values после объединения или проверяйте существование ключа с array_key_exists.

Как добавить элементы одного массива в конец другого без ключей?

Функция array_push() добавляет каждое значение второго массива как новый элемент с числовым ключом. Если нужно получить плоский список, это удобно.


$first = [1, 2];
$second = [3, 4];
array_push($first, ...$second);
print_r($first);
  

массив содержит php (php проверка наличия элемента в массиве)

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
  

Ограничение: array_push изменяет исходный массив, а не создаёт новый. Для ассоциативных массивов не подходит, так как присваивает только числовые ключи.

- содержимое массива php (php вывод содержимого массива)
- Php добавить массив в конец массива (добавление элемента в конец массива php)
- Php удалить первый элемент массива (php удалить первый элемент массива)

Расширенные примеры объединения массивов

Пример 1: объединение массивов с частичным перекрытием числовых ключей с помощью оператора +

Пример

$arr1 = [0 => 'zero', 1 => 'one', 2 => 'two'];
$arr2 = [1 => 'ONE', 3 => 'three'];
$result = $arr1 + $arr2;
print_r($result);
Array
(
    [0] => zero
    [1] => one
    [2] => two
    [3] => three
)

Ключ 1 остался из первого массива, 3 добавлен из второго.

Пример 2: рекурсивное объединение многомерных массивов с помощью array_merge_recursive

Пример

$config1 = ['database' => ['host' => 'localhost', 'port' => 3306]];
$config2 = ['database' => ['user' => 'root', 'port' => 3307]];
$config = array_merge_recursive($config1, $config2);
print_r($config);
Array
(
    [database] => Array
        (
            [host] => localhost
            [port] => Array
                (
                    [0] => 3306
                    [1] => 3307
                )
            [user] => root
        )
)

Значение 'port' стало массивом, так как оба массива содержали этот ключ.

Пример 3: объединение трёх массивов spread-оператором

Пример

$a = ['x' => 1];
$b = ['y' => 2];
$c = ['z' => 3];
$result = [...$a, ...$b, ...$c];
print_r($result);
Array
(
    [x] => 1
    [y] => 2
    [z] => 3
)

Пример 4: объединение массивов с сохранением ассоциативных ключей и переиндексацией числовых

Пример

$first = ['a' => 1, 2 => 'num'];
$second = ['b' => 2, 3 => 'another'];
$result = array_merge($first, $second);
print_r($result);
Array
(
    [a] => 1
    [0] => num
    [b] => 2
    [1] => another
)

Числовой ключ 2 превратился в 0, а 3 в 1.

Пример 5: использование array_replace для обновления значений по числовым ключам

Пример

$base = ['red', 'green', 'blue'];
$update = [1 => 'yellow', 4 => 'purple'];
$result = array_replace($base, $update);
print_r($result);
Array
(
    [0] => red
    [1] => yellow
    [2] => blue
    [4] => purple
)

Элемент с ключом 1 заменён, ключ 4 добавлен.

Пример 6: объединение с проверкой дубликатов в цикле foreach

Пример

$first = ['a' => 10, 'b' => 20];
$second = ['b' => 30, 'c' => 40];
$result = $first;
foreach ($second as $key => $value) {
    if (array_key_exists($key, $result)) {
        $result[$key] = [$result[$key], $value];
    } else {
        $result[$key] = $value;
    }
}
print_r($result);
Array
(
    [a] => 10
    [b] => Array
        (
            [0] => 20
            [1] => 30
        )
    [c] => 40
)

При совпадении ключа создаётся массив из обоих значений.

Пример 7: объединение массивов с числовыми ключами без переиндексации с помощью +

Пример

$arr1 = [100 => 'a', 200 => 'b'];
$arr2 = [150 => 'c', 200 => 'd'];
$result = $arr1 + $arr2;
print_r($result);
Array
(
    [100] => a
    [200] => b
    [150] => c
)

Ключ 200 остался из первого массива.

Пример 8: объединение массивов с помощью array_push и array_values для сброса ключей

Пример

$first = ['x' => 1, 'y' => 2];
$second = ['z' => 3];
$merged = array_values($first) + array_values($second);
// или через array_push
$result = [];
array_push($result, ...array_values($first), ...array_values($second));
print_r($result);
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

Объединение двух массивов в PHP - comments

En
Php объединить два массива (php)