在单个数组中获取通用数量的值

时间:2017-10-19 21:22:26

标签: php arrays

我想从数组中获取常用的值。请检查以下数组

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

如您所见,以下是常见项目:

  • 0和5
  • 1和10
  • 3和8

我需要输出如:

array(1807, 3013, 1815)

要明确array_unique不会在这里工作,因为它会从数组中删除重复项。我不想删除重复项,我想删除不重复的..

4 个答案:

答案 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_uniquearray_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;