Ответ 1
Попробуйте array_merge
:
array_unique(array_merge($array1, $array2));
В математике есть 3 операции с множествами: пересечение, разность и объединение (объединение). В PHP мы можем делать эти операции с массивами:
array_intersect
array_diff
Какая функция для объединения?
В массиве результатов не должно быть дубликатов (например, array_intersect
и array_diff
).
Если индексы являются числовыми, то array_merge
не будет перезаписывать исходное значение, а будет добавлено (Документы PHP).
Попробуйте array_merge
:
array_unique(array_merge($array1, $array2));
array_unique( array_merge( ... ) )
Ответ Adrien не обязательно будет производить последовательно пронумерованный массив из двух последовательно пронумерованных массивов - вот несколько вариантов, которые будут:
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
.
Используйте array_unique
и array_merge
вместе.
Из кода в Документация 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);
?>
При выполнении этого script будет напечатано следующее:
Union of $a and $b: array(3) { ["a"]=> string(5) "apple" ["b"]=> string(6) "banana" ["c"]=> string(6) "cherry" } Union of $b and $a: array(3) { ["a"]=> string(4) "pear" ["b"]=> string(10) "strawberry" ["c"]=> string(6) "cherry" }
используйте для этого оператор "+". См. Ссылку Операторы массива
$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
Это приведет к объединению обоих массивов.
OP не указал, является ли объединение значением или ключом, а в PHP есть array_merge
для объединения значений и +
для объединения ключей. Результат зависит от того, проиндексирован ли массив или имеет ключ , и какой массив будет первым.
$a = ['a', 'b'];
$b = ['b', 'c'];
$c = ['a' => 'A', 'b' => 'B'];
$d = ['a' => 'AA', 'c' => 'C'];
Смотрите array_merge
array_merge
array_merge($a, $b); // [0 => 'a', 1 => 'b', 2 => 'b', 3 => 'c']
array_merge($b, $a); // [0 => 'b', 1 => 'c', 2 => 'a', 3 => 'b']
+
Смотрите оператор +
$a + $b; // [0 => 'a', 1 => 'b']
$b + $a; // [0 => 'b', 1 => 'c']
array_merge
array_merge($c, $d); // ['a' => 'AA', 'b' => 'B', 'c' => 'C']
array_merge($d, $c); // ['a' => 'A', 'c' => 'C', 'b' => 'B']
+
$c + $d; // ['a' => 'A', 'b' => 'B', 'c' => 'C']
$d + $c; // ['a' => 'AA', 'c' => 'C', 'b' => 'B']