【问题标题】:Show only duplicate elements from an array仅显示数组中的重复元素
【发布时间】:2011-05-13 16:37:55
【问题描述】:

我有一个包含人名的排序数组。 这个数组有很多相同的名字。

我只想输出重复的名字。

例子,

输入数组:

大批 ( [0] => 阿巴斯 [1] => 阿拜 [2] => 阿比纳夫 [3] => 阿布舍克 [4] => 阿迪亚 [5] => 艾哈迈德 [6] => 艾哈迈德 [7] => 阿杰 [8] => 阿杰 }

它应该返回

大批 ( [5] => 艾哈迈德 [6] => 艾哈迈德 [7] => 阿杰 [8] => 阿杰 }

【问题讨论】:

  • 是否需要保留原索引号?
  • @nobita 这可能会有所帮助。但它只返回值出现的次数。实际上,有没有办法获取多次出现的键值?

标签: php arrays


【解决方案1】:

使用此代码:

# assuming your original array is $arr
array_unique(array_diff_assoc($arr, array_unique($arr)));

它将返回唯一重复项,但如果您想要非唯一重复项,请使用:

array_diff_assoc($arr, array_unique($arr));

编辑:根据您的 cmets,试试这个代码:

$uarr = array_unique($arr);
var_dump(array_diff($arr, array_diff($uarr, array_diff_assoc($arr, $uarr))));

输出

array(4) {
  [5]=>
  string(5) "Ahmed"
  [6]=>
  string(5) "Ahmed"
  [7]=>
  string(4) "Ajay"
  [8]=>
  string(4) "Ajay"
}

【讨论】:

  • 我试过 array_diff_assoc($arr, array_unique($arr));但它只返回了上面示例中的元素 6 和 8。
【解决方案2】:

您可以使用此函数http://php.net/manual/en/function.array-unique.php 获取一个没有重复值的数组,然后您可以使用此函数http://www.php.net/manual/en/function.array-intersect.php 查找差异,保持键关联。

【讨论】:

  • 我认为这似乎是最好的解决方案
【解决方案3】:

试试 array_reduce:

http://php.net/manual/en/function.array-reduce.php

创建一个回调,使用 $input 中的值作为键填充数组,并相应地递增它们。然后过滤那些出现多次的。

【讨论】:

    【解决方案4】:

    使用array_count_values() 对数组中的所有内容进行计数,然后过滤结果数组以仅显示大于 1 的数组:

    $input = array(.... your names here ....);
    
    $counts = array_count_values($input);
    
    $duplicates = array_filter($counts, function element { return ($element > 1) });
    

    这不是我的想法,但应该足以让你开始。

    【讨论】:

    • 有没有办法知道其值出现多次的键?
    • $counts 中会有一组 name => count 值。只需查找 count > 1 的元素,这就是 array_filter 所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2021-04-10
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多