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

How can you get unique values from multiple arrays using array_unique?

有什么方法可以将两个或多个数组放入 array_unique() 函数中吗? 如果没有,是否有任何其他解决方案可以从多个数组中获得唯一的结果?

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

中阅读更多相关信息

但是正如@u_mulder 所建议的那样,您首先合并数组,可能合并到一个临时数组中(您可以学习如何做到这一点 here),然后应用 array_unique到那个临时数组。

你问题第一部分的答案是

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);

returns ['thing', 'another_thing', 'same_thing'];

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

给你一个警告

Warning: array_unique() expects parameter 2 to be integer, array given

和returns null.

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

同时给你一个警告

Warning: array_unique() expects at most 2 parameters, 3 given

和returns null.


你问题第二部分的答案是

要使用 array_unique 获取唯一值,您必须有 一个 个值数组。正如 u_mulder 评论的那样,您可以通过在使用 array_unique.

之前使用 array_merge 将各种输入数组合并为一个数组来做到这一点
$unique = array_unique(array_merge($one_array, $two_arrays, $or_more_arrays));

returns

['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_unique.

之前将外部数组解包到数组合并中以展平它
$unique = array_unique(array_merge(...$multi_array_example));

或者在参数解包之前的旧 PHP 版本 (<5.6) 中,您可以使用 array_reducearray_merge

$unique = array_unique(array_reduce($multi_array_example, 'array_merge', []));

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