在PHP中设置数组的理论联盟
数学中有3组操作:交集,差异和联合(统一)。 在PHP中,我们可以使用数组执行此操作:
array_intersect
array_diff
联合的功能是什么?
结果数组中没有重复项(如array_intersect
和array_diff
)。
如果索引是数字的,那么array_merge
不会覆盖原始值,但会被附加(PHP文档)。
尝试array_merge
:
array_unique(array_merge($array1, $array2));
PHP手册
array_unique( array_merge( ... ) )
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或1000次的阵列):
相同的测试,但两个阵列非常相似(至少80%重复):
看来使用数组联合运算符来做实际联合是最快的方法。 但请注意, array_flip
仅在数组的值都是字符串或全部整数时才是安全的; 如果你必须产生一个对象数组的联合,我推荐带有array_merge
和array_diff
的版本。