2016-07-07 82 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

很高興幫助你。 –

相關問題