将php数组的重复值添加到另一个并保持相同的键

时间:2012-05-03 13:13:57

标签: php arrays

我有一个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
)

我该怎么做?

感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

测试一下:

$return = array_unique($array);
var_dump(
    array_diff($array, array_diff($return, array_diff_assoc($array, $return)))
);

答案 1 :(得分: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));

输出:

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"
  }
}

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用array_unique() .http://php.net/manual/en/function.array-unique.php

答案 4 :(得分:0)

$duplicated=null;

foreach($yourarray as $k => $v){
    foreach($yourarray as $k2 => $v2){
        if($v == $v2 && $k2 != $k){
            $duplicated[$k]=$v;
        }
    }
}