PHP - 如果任何数组值匹配,则删除所有数组

时间:2013-12-09 20:01:26

标签: php arrays

我觉得我觉得必须有一个非常简单的解决方案。

说我有一个数组:

$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);

我怎么可能删除多次出现的所有值?

所以我留下了一个看起来像这样的数组

$A = array(2, 4, 6, 13);

我尝试使用数组唯一,但这只会删除重复项,只留下一个值。我需要使用以下逻辑:如果有任何匹配的值 - 则删除所有匹配的值。

4 个答案:

答案 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
)

Demo.

答案 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;}));