我想从数组中获取常用的值。请检查以下数组
array(111) {
[0]=> int(1807)
[1]=> int(3013)
[2]=> int(2989)
[3]=> int(1815)
[4]=> int(2993)
[5]=> int(1807)
[6]=> int(2999)
[7]=> int(3003)
[8]=> int(1815)
[9]=> int(3009)
[10]=> int(3013)
}
如您所见,以下是常见项目:
我需要输出如:
array(1807, 3013, 1815)
要明确array_unique不会在这里工作,因为它会从数组中删除重复项。我不想删除重复项,我想删除不重复的..
答案 0 :(得分:1)
尝试以下方法:
$arr = array(
1807,
3013,
2989,
1815,
2993,
1807,
2999,
3003,
1815,
3009,
3013,
);
$arr2 = $arr;
$recurring = [];
foreach($arr2 as $key => $value)
{
unset($arr2[$key]);
if(in_array($value, $arr2) && !in_array($value, $recurring))
{
$recurring[] = $value;
}
}
var_dump($recurring);
这将为您提供$recurring
变量内部的所有重复值。但请确保不要通过循环迭代主数组,而是将其复制为$arr2 = $arr;
答案 1 :(得分:1)
您只需使用array_unique
和array_diff_assoc
功能即可。这是一个例子
$array = [1,2,3,1,2];
$unique_array = array_unique($array);
$array = array_diff_assoc($array, $unique_array);
$array = $array_unique($array);
print_r($array);
输出:
Array ( [3] => 1 [4] => 2 )
答案 2 :(得分:0)
我不确定,如果使用php构建数组函数可以更容易完成,但是一个带有两个临时数组变量的简单for循环将完成工作。
$array = [1,1,2,3,4,4];
$t = [];
$double = [];
foreach ($array as $item) {
if (isset($t[$item])) {
$double[$item] = true;
}
$t[$item] = true;
}
$values = array_keys($double);
再次考虑一个没有显式循环的其他解决方案并使用array_reduce
$array = [1,1,2,3,4,4];
$values = [];
sort($array);
array_reduce($array, function($last, $current) use (&$values) {
return $last == $current ? $values[$current] = $current : $current;
}, false);
print_r($values);
答案 3 :(得分:0)
你想要的只是重复。
试试这个:
$duplicates= array();
foreach(array_count_values($arr) as $val => $c)
if($c > 1) $duplicates[] = $val;
return $duplicates;