最高效实现并集是用Set结构,PHP中推荐array_unique+array_merge+array_values组合;关联数组需注意键冲突,大数据量宜用phpcollection/Set库,多维或对象需自定义去重逻辑。
直接用集合(set)结构实现并集最高效,核心是利用其自动去重和常数级查找的特性,避免手动遍历比对。
PHP 中推荐用 array_unique + array_merge 组合
这是最常用、语义清晰、兼容性好的方式:
- 先用 array_merge() 合并所有数组,保留数字索引顺序(字符串键会被覆盖)
- 再用 array_unique() 去重,返回原顺序去重后的数组
- 最后用 array_values() 重置索引,确保结果是标准的连续数字键数组
示例:
```php$a = [1, 2, 3];
$b = [3, 4, 5];
$c = [5, 6];
$union = array_values(array_unique(array_merge($a, $b, $c)));
// 结果:[1, 2, 3, 4, 5, 6]
```
处理关联数组时注意键冲突
若数组含字符串键(如 ['name' => 'Alice', 'age' => 25]),array_merge 会覆盖同名键,而 + 运算符则保留左侧优先。需按需选择:
- 要保留全部键值对(不覆盖),用 $union = $a + $b + $c
- 要合并后统一去重(按值而非键),仍可用
array_unique(array_merge(...)),但需确认业务是否允许键丢失
大数据量时改用 Set 类提升性能
原生函数在百万级元素时可能变慢。可引入 phpcollection/set 库,底层基于哈希表,支持链式调用:
- 安装:
composer require phpcollection/phpcollection - 使用:
\PhpCollection\Set::fromArray($a)->union(\PhpCollection\Set::fromArray($b))->toArray() - 优势:一次遍历完成并集,无冗余排序或键重建,内存与时间更可控
多维数组或对象需自定义去重逻辑
普通函数无法识别嵌套结构的“重复”。例如两个数组都含 ['id'=>100, 'name'=>'Tom'],需显式指定依据字段:
- 提取唯一标识列(如 id)构建 lookup 表
- 遍历源数组,检查
$seen[$item['id']]是否已存在,未存在则加入结果并标记 - 也可用
array_column($arr, 'id')配合array_intersect_key辅助去重










