数学中有 3 种集合运算:交集、差集和并集(统一)。在 PHP 中,我们可以对数组执行此操作:
- 路口:
array_intersect
- 不同之处:
array_diff
联合的作用是什么?
结果数组中不能有重复项(如array_intersect
和array_diff
)。
如果索引是数字,则array_merge
不会覆盖原始值,而是会附加(PHP 文档)。
array_unique( array_merge( ... ) )
Adrien 的回答不需要从两个顺序编号的数组中生成顺序编号的数组 - 这里有一些选项可以:
array_values(array_unique(array_merge($array1, $array2)));
(Adrien 的回答是随后重新编号)
array_keys(array_flip($array1)+array_flip($array2))
(将值放在键中,并使用数组联合运算符)
array_merge($array1, array_diff($array2, $array1))
(合并前从第二个数组中删除共享值)
基准测试结果(用于在我的系统上合并两个长度为 1000 的数组一千次):
相同的测试,但两个数组非常相似(至少 80% 重复):
似乎使用数组联合运算符进行实际联合是最快的方法。但是请注意,array_flip
只有当数组的值都是字符串或整数时才安全;如果您必须生成对象数组的并集,我推荐使用array_merge
and的版本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);
?>
执行时,此脚本将打印以下内容:
$a 和 $b 的并集: 数组(3){ [“一”]=> 字符串(5)“苹果” ["b"]=> 字符串(6)“香蕉” ["c"]=> 字符串(6)“樱桃” } $b 和 $a 的联合: 数组(3){ [“一”]=> 字符串(4)“梨” ["b"]=> 字符串(10)“草莓” ["c"]=> 字符串(6)“樱桃” }
OP 没有指定联合是按值还是按键,PHP 具有array_merge
用于合并值和+
合并键的功能。结果取决于数组是索引的还是键控的以及哪个数组先出现。
$a = ['a', 'b'];
$b = ['b', 'c'];
$c = ['a' => 'A', 'b' => 'B'];
$d = ['a' => 'AA', 'c' => 'C'];
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']
$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
它将导致两个数组的联合。
试试这个:
function array_union($array1, $array2){
return array_unique(array_merge($array1, $array2));
}