【问题标题】:PHP : Remove duplicate values from associative array and return an associative array containing the duplicate valuesPHP:从关联数组中删除重复值并返回包含重复值的关联数组
【发布时间】:2016-06-13 12:56:09
【问题描述】:

我有如下关联数组

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

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

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

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

PHP 是否提供这样的功能,如果没有,我将如何实现?

【问题讨论】:

  • 要保存索引吗?
  • 是的,保存索引很重要
  • 达摩的回答解决了我问的问题。但是,稍微前进后,我发现我现在需要这样的结果 '$arr = [1=>0, 2=>1, 3=>1, 4=>2, 5=>2, 6= >3]'
  • 我认为最好创建一个新的 qiestion 并很好地解释数组中数字的含义
  • @dharma-parmar Dharma 的回答解决了我提出的问题。但是,稍微前进后,我发现我现在需要这样的结果 '$arr = [1=>0, 2=>1, 3=>1, 4=>2, 5=>2, 6= >3]' 变为 '$arr = [1=>0, 4=>2, 6=>3]' '$new_arr = [[2=>1, 3=>1], [4=>2, 5 =>2]]

标签: php associative-array


【解决方案1】:

您可以使用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
)

【讨论】:

    【解决方案2】:

    试试:

    使用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
    )
    

    【讨论】:

    • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
    猜你喜欢
    • 2013-01-11
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多