我觉得我觉得必须有一个非常简单的解决方案。
说我有一个数组:
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
我怎么可能删除多次出现的所有值?
所以我留下了一个看起来像这样的数组
$A = array(2, 4, 6, 13);
我尝试使用数组唯一,但这只会删除重复项,只留下一个值。我需要使用以下逻辑:如果有任何匹配的值 - 则删除所有匹配的值。
答案 0 :(得分:2)
你可以尝试这样的事情。
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
$A = array_count_values($A);
foreach($A as $key => $value) {
if($value > 1)
unset($A[$key]);
}
$A = array_keys($A);
print_r($A);
编辑:修正错误
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 13
)
答案 1 :(得分:2)
您可以将array_filter()
与自定义回调一起使用,以过滤掉多次重复的数组值:
function removeDuplicates($array) {
$values = array_count_values($array);
return array_filter($array, function($item) use ($values) {
return $values[$item] === 1;
});
}
用法:
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
print_r( removeDuplicates($A) );
输出:
Array
(
[2] => 2
[3] => 4
[4] => 6
[8] => 13
)
答案 2 :(得分:0)
你可以通过编码来实现这一目标。
首先看一下这篇SO帖子,使用array_unique获取所有重复项的列表:
php return only duplicated entries from an array
然后你必须循环遍历上面链接返回的重复项,然后执行array_search返回值的索引,然后使用array_splice实际删除它。
我不知道任何代码会在一步中为您完成此任务。
答案 3 :(得分:0)
试试这个(使用PHP> = 5.3):
$A = array_keys(array_filter(
array_count_values($A),
function ($count)
{
return $count == 1;
}
));
<强>解释强>
array_count_values使用数组值作为键返回数组,将数组中的频率作为值返回。
array_filter迭代数组中的每个值,将它们传递给回调函数(在本例中为anonymous function)。如果频率为1,则将数组中的当前值返回到结果数组中。
array_keys返回数组中的键,在这种情况下,频率等于1的值。
因此,压缩的“单行”形式是:
$A=array_keys(array_filter(array_count_values($A),function($c){return $c==1;}));