2016-06-13 117 views
-1

我有关联数组像下面PHP:从assosciative数组中删除重复的值,并返回包含所述重复值的关联数组

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

我想从初始阵列删除重复的值并返回这些重复如一个新的阵列。所以我最终会得到类似的东西;

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

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

PHP是否提供这样的功能,或者如果没有,我会如何实现这一目标?

+0

你想保存索引? – splash58

+0

是的,其重要的是我保存索引 – DMcg

+0

达摩的答案解决了我问的问题。然而,稍微提了一下,我发现我现在需要像这样的结果'$ arr = [1 => 0,2 => 1,3 => 1,4 => 2,5 => 2,6 = > 3]' – DMcg

回答

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 
) 
+4

为什么OP要“试试这个”?一个好的答案***将总是解释所做的事情以及为什么这样做,不仅是为了OP,还是为了将来访问SO。 –

0

你可以使用从数组中获取唯一值然后比较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 
)