Set Theory Объединение массивов в PHP

Существует 3 операции с наборами в математике: пересечение, различие и объединение (объединение). В PHP мы можем выполнять эти операции с массивами:

  • пересечение: array_intersect
  • разность: array_diff

Какая функция для объединения?

В результирующем массиве не может быть дубликатов (например, array_intersect и array_diff ).

Если индексы являются числовыми, то array_merge не будет перезаписывать исходное значение, но будет добавлено ( PHP docs ).

Related of "Set Theory Объединение массивов в PHP"

Попробуйте 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 тысяч раз в моей системе):

  • Уникальный (версия Adrien): 2.862163066864 секунды
  • Values_Unique: 3.12 секунды
  • Keys_Flip: 2,34 секунды
  • Merge_Diff: 2,64 секунды

Тот же тест, но с двумя массивами, очень похожими (по крайней мере, на 80%):

  • Уникальная версия (версия Adrien): 2,92 секунды
  • Values_Unique: 3,15 секунды
  • Keys_Flip: 1,84 секунды
  • Merge_Diff: 2,36 секунды

Кажется, использование оператора объединения массива для фактического объединения является самым быстрым методом. Обратите внимание, однако, что 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 Это приведет к объединению обоих массивов.