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

测试一下:

$return = array_unique($array);
var_dump(
    array_diff($array, array_diff($return, array_diff_assoc($array, $return)))
);
于 2012-05-03T13:20:08.997 回答
1

PHP 没有内置函数可以执行此操作,但您可以组合array_count_valuesarray_intersect获得所需的数组。

第一个用于了解数组中确实存在哪些值(并对它们进行计数,以便轻松过滤掉每个不重复的值),第二个函数确实保留键。如果您预先知道重复值,则只需要使用后者:

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

Output:

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

If you need all duplicates in one array, You can try:

$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 回答
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 回答