数学中有3组操作:交集,差异和联合(统一).在PHP中,我们可以使用数组执行此操作:
array_intersect
array_diff
联盟的功能是什么?
结果数组中没有重复项(如array_intersect
和array_diff
).
如果索引是数字,则array_merge
不会覆盖原始值,但会附加(PHP文档).
adr*_*ien 54
试试array_merge
:
array_unique(array_merge($array1, $array2));
Run Code Online (Sandbox Code Playgroud)
Adrien的答案不一定需要从两个顺序编号的数组生成一个顺序编号的数组 - 以下是一些选项:
array_values(array_unique(array_merge($array1, $array2)));
Run Code Online (Sandbox Code Playgroud)
(Adrien的回答是后来重新编号键)
array_keys(array_flip($array1)+array_flip($array2))
Run Code Online (Sandbox Code Playgroud)
(将值放入键中,并使用数组union运算符)
array_merge($array1, array_diff($array2, $array1))
Run Code Online (Sandbox Code Playgroud)
(合并前从第二个数组中删除共享值)
基准测试结果(用于在我的系统上合并两个长度为1000千次的数组):
相同的测试,但两个数组非常相似(至少80%重复):
似乎使用数组union运算符来做实际联合是最快的方法.但请注意,array_flip
只有当数组的值都是字符串或全部整数时才是安全的; 如果你必须生成一个对象数组的联合,我建议用array_merge
和的版本array_diff
.