2

配列内のすべての重複を見つけて、キーを重複値キーとして、値をその重複のキーとして持つ新しい配列を作成しようとしています

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

ありがとう

4

2 に答える 2

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);
于 2013-07-29T17:51:43.373 に答える