在数组中查找重复值,该数组创建一个新数组,其中键为重复键,值为dupe

时间:2013-07-29 17:15:17

标签: php arrays

我试图找到我的数组中的所有重复项,并创建一个新的数组,其中键作为重复值键,值作为其重复的键

例如

[1] => 10
[2] => 11
[3] => 12
[4] => 12
[5] => 12
[6] => 13
[7] => 13

我应用重复检查后,我只需要

[4] => [3] // value of key 4 is dupe of key 3
[5] => [3] // value of key 5 is dupe of key 3
[7] => [6] // value of key 7 is dupe of key 6

这会让我获得所有重复的密钥,但我需要重复的密钥,其值为重复的密钥

$arr_duplicates = array_keys(array_unique( array_diff_assoc( $array, array_unique( $array ) ) ));

由于

2 个答案:

答案 0 :(得分:2)

尝试使用此方法来提升其他解决方案的速度。但是,在大型数据集上会占用更多内存。

<?php

$orig = array(
    1   => 10,
    2   => 11,
    3   => 12,
    4   => 12,
    5   => 12,
    6   => 13,
    7   => 13
);

$seen  = array();
$dupes = array();

foreach ($orig as $k => $v) {
    if (isset($seen[$v])) {
        $dupes[$k] = $seen[$v];
    } else {
        $seen[$v] = $k;
    }
}
unset($seen);

var_dump($dupes);

答案 1 :(得分:1)

这应该做你想要的。循环遍历数组,并查看该值是否已存在。如果是,请将其添加到结果中。

$arr_duplicates = array();
foreach($array as $k=>$v){
    // array_search returns the 1st location of the element
    $first_index = array_search($v, $array);
    // if our current index is past the "original" index, then it's a dupe
    if($k != $first_index){
        $arr_duplicates[$k] = $first_index;
    }
}

DEMO:http://ideone.com/Kj0dUV