如何使用array_unique从多个数组中获取唯一值?

时间:2016-06-29 18:16:29

标签: php arrays array-unique

有没有办法将两个或更多数组放入array_unique()函数? 如果没有,是否有其他解决方案可以从多个阵列中获得独特的结果?

2 个答案:

答案 0 :(得分:5)

问题第一部分的答案是

The array_unique function definition in the PHP manual表示array_unique只接受两个参数,一个数组和一个可选的整数来确定函数的排序行为。

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

不是采用手册的话,而是一些测试数组。

$one_array      = ['thing', 'another_thing', 'same_thing', 'same_thing'];
$two_arrays     = ['A', 'B', 'C', 'thing', 'same_thing'];
$or_more_arrays = ['same_thing', 1, 2, 3];

一些测试显示该功能确实如宣传的那样工作:

$try_it = array_unique($one_array);

返回['thing', 'another_thing', 'same_thing'];

$try_it = array_unique($one_array, $two_arrays);

给你一个警告

  

警告:array_unique()期望参数2为整数,给定数组

并返回null

$try_it = array_unique($one_array, $two_arrays, $or_more_arrays);

也会给你一个警告

  

警告:array_unique()最多需要2个参数,3个给定

并返回null

问题第二部分的答案是

要使用array_unique获取唯一值,您必须拥有一个值数组。正如u_mulder所评论的那样,您可以使用array_merge在使用array_unique之前将各种输入数组合并为一个来完成此操作。

$unique = array_unique(array_merge($one_array, $two_arrays, $or_more_arrays));

返回

['thing', 'another_thing', 'same_thing', 'A', 'B', 'C', 1, 2, 3];

如果不是几个单独的数组变量,而是有一个像这样的数组数组:

$multi_array_example = [
    [1, 2, 3],
    [2, 3, 4], 
    [3, 4, 5],
    [4, 5, 6]
];

然后,您可以使用array_reducearray_mergearray_unique合并为一个数组,然后再使用$unique = array_unique(array_reduce($multi_array_example, 'array_merge', []));

[1, 2, 3, 4, 5, 6]

返回setTimeout()

答案 1 :(得分:0)

默认情况下,array_unique()采用类型数组的两个参数array采用输入数组,而类型int的第二个参数sorting采用排序行为。您可以在PHP manual for array_unique()

中详细了解

但是正如@u_mulder所建议的,你首先合并数组,可能是一个临时数组(你可以学习如何做到here),然后将array_unique应用于那个临时数组。 / p>