2016-07-07 157 views
1

SF上有许多线程,用户回答如何返回PHP数组的唯一值。普遍的回答是:从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中进行这样的计算似乎过于复杂。

回答

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'] 
+1

伟大的答案,谢谢! – luqo33

+0

很高兴帮助你。 –

相关问题