在PHP中设置数组的理论联盟

数学中有3组操作:交集,差异和联合(统一)。 在PHP中,我们可以使用数组执行此操作:

  • 交集: array_intersect
  • 差异: array_diff
  • 联合的功能是什么?

    结果数组中没有重复项(如array_intersectarray_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次的阵列):

  • 独特(Adrien的版本):2.862163066864秒
  • Values_Unique:3.12秒
  • Keys_Flip:2.34秒
  • Merge_Diff:2.64秒
  • 相同的测试,但两个阵列非常相似(至少80%重复):

  • 独特(阿德里安版):2.92秒
  • Values_Unique:3.15秒
  • Keys_Flip:1.84秒
  • Merge_Diff:2.36秒
  • 看来使用数组联合运算符来做实际联合是最快的方法。 但请注意, array_flip仅在数组的值都是字符串或全部整数时才是安全的; 如果你必须产生一个对象数组的联合,我推荐带有array_mergearray_diff的版本。

    链接地址: http://www.djcxy.com/p/58949.html

    上一篇: Set Theory Union of arrays in PHP

    下一篇: Can't concatenate 2 arrays in PHP