从PHP中的数组返回唯一值,而不保留重复

时间:2016-07-07 09:05:53

标签: php arrays unique

SF上有许多线程,用户可以回答如何返回PHP数组的唯一值。流行的答案是:

$arrWtihDuplicates = ['a', 'a', 'a', 'b', 'c']

array_unique($arrWtihDuplicates) // will return ['a', 'b', 'c']

有没有办法让a完全退回?

这就是为什么这种行为会带来问题的原因:

让我们回到$arrWtihDuplicate。如果我只想从此数组返回重复值,该怎么办?这不起作用:

$arrWtihDuplicates = ['a', 'a', 'a', 'b', 'c'];
$withoutDuplicates = array_unique($arrWithDuplicates);

var_dump(array_diff($arrWtihDuplicates, $withoutDuplicates));

上面会返回一个空数组 - 两个数组共享相同的值,因此array_diff看不到它们之间的区别。

总而言之,如何返回没有任何重复项的数组值,以便:

['a', 'a', 'a', 'b', 'c']变为['b', 'c']

或反过来

['a', 'a', 'a', 'b', 'c']成为['a', 'a', 'a'] - 做完了 array_diff(['a', 'a', 'a', 'b', 'c'], ['a', 'a', 'a'])会返回真正的唯一标记 - bc

在PHP中进行这样的计算似乎过于复杂。

1 个答案:

答案 0 :(得分:2)

您可以使用一组PHP函数,例如array_count_valuesarray_filter和& array_keys以获得结果

$arr = ['a', 'a', 'a', 'b', 'c'];
$result = array_keys(array_filter(array_count_values($arr),function($v){ return $v==1;}));
print_r($result);//['b','c']