Подтвердить что ты не робот

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

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

  • пересечение: array_intersect
  • разница: array_diff

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

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

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

4b9b3361

Ответ 2

array_unique( array_merge( ... ) )

Ответ 3

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

  • Уникальная версия (версия 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.

Ответ 4

Используйте array_unique и array_merge вместе.

Ответ 5

Из кода в Документация 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"
}

Ответ 7

$result = array_merge_recursive($first, $second);

может быть полезна, когда у вас есть массивы с массивами внутри.

Ответ 8

Оператор +:

$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

Ответ 9

Просто используйте $array1 + $array2 Это приведет к объединению обоих массивов.

Ответ 10

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']