我有一个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
)
我该怎么做?
感谢您的帮助。
答案 0 :(得分:1)
测试一下:
$return = array_unique($array);
var_dump(
array_diff($array, array_diff($return, array_diff_assoc($array, $return)))
);
答案 1 :(得分:1)
PHP没有这样做的功能,但您可以组合array_count_values
和array_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;
}
}
}