Существует 3 операции с наборами в математике: пересечение, различие и объединение (объединение). В PHP мы можем выполнять эти операции с массивами:
array_intersect
array_diff
Какая функция для объединения?
В результирующем массиве не может быть дубликатов (например, array_intersect
и array_diff
).
Если индексы являются числовыми, то array_merge
не будет перезаписывать исходное значение, но будет добавлено ( PHP docs ).
Попробуйте array_merge
:
array_unique(array_merge($array1, $array2));
Руководство PHP
array_unique( array_merge( ... ) )
Используйте array_unique
и array_merge
вместе.
Ответ Адриена не потребует создания последовательно пронумерованного массива из двух последовательно пронумерованных массивов – вот несколько вариантов, которые будут:
array_values(array_unique(array_merge($array1, $array2)));
(Ответ Адриена с нумерацией клавиш после этого)
array_keys(array_flip($array1)+array_flip($array2))
(Поместите значения в ключи и используйте оператор объединения массива)
array_merge($array1, array_diff($array2, $array1))
(Удалите общие значения из второго массива перед слиянием)
Результаты тестов (для слияния двух массивов длиной 1000 тысяч раз в моей системе):
Тот же тест, но с двумя массивами, очень похожими (по крайней мере, на 80%):
Кажется, использование оператора объединения массива для фактического объединения является самым быстрым методом. Обратите внимание, однако, что array_flip
является только безопасным, если значения массива – это все строки или все целые числа; если вам нужно создать объединение массива объектов, я рекомендую версию с array_merge
и array_diff
.
используйте для этого оператор «+». См. Ссылку Операторы массива
Из кода в документации PHP: Array Operators :
<?php $a = array("a" => "apple", "b" => "banana"); $b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); $c = $a + $b; // Union of $a and $b echo "Union of \$a and \$b: \n"; var_dump($c); $c = $b + $a; // Union of $b and $a echo "Union of \$b and \$a: \n"; var_dump($c); ?>
При выполнении этого сценария будет напечатан следующий текст:
Союз $ a и $ b: array (3) { [ "А"] => строка (5) "яблоко" [ "Ь"] => строка (6) "банан" [ "С"] => строка (6) "вишня" } Союз $ b и $ a: array (3) { [ "А"] => строка (4) "груша" [ "Ь"] => строка (10) "клубника" [ "С"] => строка (6) "вишня" }
$result = array_merge_recursive($first, $second);
может быть полезна, когда у вас есть массивы с массивами внутри.
Оператор +
:
$x[0] = 4; $x[1] = 1; $y[0] = 9; $y[2] = 5; $u = $y + $x; // Results in: $u[0] === 9; $u[1] === 1; $u[2] === 5;
Заметим, что $x + $y
! = $y + $x
Просто используйте $array1 + $array2
Это приведет к объединению обоих массивов.