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'])
会返回仅真正的唯一标记 - b
和c
。
在PHP中进行这样的计算似乎过于复杂。
答案 0 :(得分:2)
您可以使用一组PHP函数,例如array_count_values
,array_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']