PHP:从关联数组中删除重复值并返回包含重复值的关联数组

时间:2016-06-13 12:56:10

标签: php associative-array

我有关联数组,如下所示

$arr = [1=>0, 2=>1, 3=>1, 4=>2]

我想从初始数组中删除重复值,并将这些重复项作为新数组返回。所以我最终会得到类似的东西;

$arr = [1=>0, 4=>2]

$new_arr = [2=>1, 3=>1]

PHP是否提供了这样的功能,或者如果不能提供这样的功能?

2 个答案:

答案 0 :(得分:2)

您可以使用array_unique从数组中获取唯一值,然后将生成的数组与array_diff_assoc进行比较

这将保留两个数组的索引,这是一个例子:

$arr = array(1=> 2, 2=>2, 3=>3);
print_r($arr);
$arr1 = array_unique($arr);
print_r($arr1);
$arr2 = array_diff_assoc($arr,$arr1);
print_r($arr2);

结果:

Array
(
    [1] => 2
    [2] => 2
    [3] => 3
)
Array
(
    [1] => 2
    [3] => 3
)
Array
(
    [2] => 2
)

答案 1 :(得分:0)

尝试:

使用array_filter()从数组中获取所有重复值

使用array_diff()从数组中获取所有唯一值

$array = array(1=>0, 2=>1, 3=>1, 4=>2);
$counts = array_count_values($array);
$duplicates = array_filter($array, function ($value) use ($counts) {
    return $counts[$value] > 1;
});
print '<pre>';print_r($duplicates);

$result=array_diff($array,$duplicates);
print '<pre>';print_r($result);

输出:

Array
(
    [2] => 1
    [3] => 1
)

Array
(
    [1] => 0
    [4] => 2
)