0

PHP 配列があり、そこから重複した値を抽出し、各値に対応するキーを新しい配列に保持したいと考えています。

これは私の開始配列です

Array
(
    [0] => ABC123-A
    [1] => BG231-B
    [2] => ABC123-A
    [3] => BG231-E
    [4] => BG231-F
    [5] => BG231-G
    [6] => BG231-H
    [7] => ABC123-A
    [8] => BG231-J
    [9] => BG231-K
    [10] => ABC123-A
)

そして、これが私が持ちたいものです:

Array
(
    [0] => ABC123-A
    [2] => ABC123-A
    [7] => ABC123-A
    [10] => ABC123-A
)

どうやってやるの ?

手伝ってくれてありがとう。

4

5 に答える 5

1

PHPにはこれを行う関数が組み込まれていませんが、組み合わせarray_count_valuesarray_intersect必要な配列を取得することができます。

最初の値は、配列に存在する値を知るために使用され(そして、それらをカウントして、重複していないすべての値を簡単に除外できるようにします)、2番目の関数はキーを保持します。重複した値を前もって知っている場合は、後者を使用するだけで済みます。

$duplicatesArray = array_intersect($array, array($duplicate));

完全な例:

/**
 * @param array $array
 * @param int $threshold (optional) minimum number of elements per group
 * @return array
 */
function array_group_by_value(array $array, $threshold = 1)
{
    $grouped = array();
    foreach(array_count_values($array) as $value => $count)
    {
        if ($count < $threshold) continue;
        $grouped[$value] = array_intersect($array, array($value));
    }
    return $grouped;
}

使用例:

$test = array('a', 'b', 'a', 'a', 'b', 'c');

var_dump(array_group_by_value($test, 2));

出力:

array(2) {
  ["a"]=>
  array(3) {
    [0]=>
    string(1) "a"
    [2]=>
    string(1) "a"
    [3]=>
    string(1) "a"
  }
  ["b"]=>
  array(2) {
    [1]=>
    string(1) "b"
    [4]=>
    string(1) "b"
  }
}
于 2012-05-03T13:25:43.333 に答える
1

1 つの配列にすべての重複が必要な場合は、次を試すことができます。

$unique = array_unique($array); //get unique values
$diff = array_diff_assoc($array, $unique); //get duplicates
$intersect = array_intersect($unique, $diff); //get unique values with duplicates
return $intersect+$diff; //join unique with duplicates and duplicates
于 2012-05-03T14:01:33.053 に答える
1

これをテストします。

$return = array_unique($array);
var_dump(
    array_diff($array, array_diff($return, array_diff_assoc($array, $return)))
);
于 2012-05-03T13:20:08.997 に答える
0
$duplicated=null;

foreach($yourarray as $k => $v){
    foreach($yourarray as $k2 => $v2){
        if($v == $v2 && $k2 != $k){
            $duplicated[$k]=$v;
        }
    }
}
于 2012-05-03T13:20:14.587 に答える
-1

array_unique().http://php.net/manual/en/function.array-unique.phpを使用できます

于 2012-05-03T13:18:35.710 に答える