PHP : Remove duplicate values from associative arr

2019-03-03 20:03发布

I have associative array like below

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

I would like to remove the duplicate values from the initial array and return those duplicates as a new array. So I would end up with something like;

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

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

Does PHP provide such a function or if not how would I achieve this?

2条回答
兄弟一词,经得起流年.
2楼-- · 2019-03-03 20:40

Try:

Use array_filter() to get all duplicate values from array

Use array_diff() to get all unique values from array

$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);

Output:

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

Array
(
    [1] => 0
    [4] => 2
)
查看更多
祖国的老花朵
3楼-- · 2019-03-03 20:50

You can get unique values from an array using array_unique and then compare the resulting array with array_diff_assoc

This will keep the indexes for both arrays, here's an example:

$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);

And the result:

Array
(
    [1] => 2
    [2] => 2
    [3] => 3
)
Array
(
    [1] => 2
    [3] => 3
)
Array
(
    [2] => 2
)
查看更多
登录 后发表回答