Set Theory Union of arrays in PHP
There are 3 operations with sets in mathematics: intersection, difference and union (unification). In PHP we can do this operations with arrays:
array_intersect
array_diff
What function is for union?
No duplicates can be in the result array (like array_intersect
and array_diff
).
If indexes are numeric then array_merge
will not overwrite the original value, but will be appended (PHP docs).
Try array_merge
:
array_unique(array_merge($array1, $array2));
PHP Manual
array_unique( array_merge( ... ) )
Adrien's answer won't necessary produce a sequentially numbered array from two sequentially numbered arrays - here are some options that will:
array_values(array_unique(array_merge($array1, $array2)));
(Adrien's answer with renumbering the keys afterward)
array_keys(array_flip($array1)+array_flip($array2))
(Put the values in the keys, and use the array union operator)
array_merge($array1, array_diff($array2, $array1))
(Remove the shared values from the second array before merging)
Benchmark results (for merging two arrays of length 1000 a thousand times on my system):
Same test, but with the two arrays being very similar (at least 80% duplicate):
It seems using the array union operator to do the actual union is the fastest method. Note however that array_flip
is only safe if the array's values are all strings or all integers; if you have to produce the union of an array of objects, I recommend the version with array_merge
and array_diff
.
上一篇: PHP:一起添加数组
下一篇: 在PHP中设置数组的理论联盟