仅获取那些在PHP中重复N次的数组值

时间:2019-05-22 05:48:54

标签: php arrays function arraylist filter

我正在尝试从数组中获取那些在数组中重复N次的值。我知道这听起来很混乱。让我举个例子:

我有一个数组作为$ filter:

array[
  0 => "556878",
  1 => "12345",
  2 => "12345",
  3 => "234567",
  4 => "45673",
  5 => "45673"
]

如果您看到 12345 正在重复 2次 45673 也是如此。

我想创建一个函数,或者如果它已经存在于PHP中,则可以帮助我仅获得重复N次的那些值。与上面的示例类似,值12345和45673重复2次。因此,如果我将2作为函数的参数,例如:

getNtimes($filter,2)

它将返回:

array[
      0 => "12345",
      1 => "45673"
    ]

我正在寻找获得期望结果的最有效方法。有人可以帮我吗?

谢谢。

5 个答案:

答案 0 :(得分:3)

在函数内将array_count_values()foreach()一起使用:-

function getNtimes($array,$count){
    $finalArray = [];

    $repeatedValuesCountArray = array_count_values($array);
    foreach($repeatedValuesCountArray as $key=>$value){
        if($value == $count){
            $finalArray[] = $key;
        }
    }
    return $finalArray;
}


print_r(getNtimes($array,2));

输出:-https://3v4l.org/g846e

答案 1 :(得分:3)

这是使用array_filter的函数,

function getNtimes($arr, $n)
{
    $temp = array_count_values($arr);
    // filter with count and then get those keys.
    return array_keys(array_filter($temp, function ($value) use (&$n) {
        return $value == $n;
    }));
}

array_keys —返回数组的所有键或键的子集
array_count_values —计算数组的所有值
array_filter —使用回调函数过滤数组的元素

正在工作demo

答案 2 :(得分:3)

正如其他人回答的那样,从array_count_values开始。
然后,我使用array_intersect获取与$n匹配的值。
最后,由于“值”是键,因此我使用array_keys从原始数组中获取重复的值。

$n = 2;
$result = array_keys(array_intersect(array_count_values($arr), [$n]));

var_dump($result);

输出:

array(2) {
  [0]=>
  int(12345)
  [1]=>
  int(45673)
}

https://3v4l.org/BIgCD

答案 3 :(得分:0)

使用array_unique()+ array_filter()+ array_count_values():

print_r
  (
    array_unique(
      array_filter($arr = [
                            0 => 556878,
                            1 => 12345,
                            2 => 12345,
                            3 => 234567,
                            4 => 45673,
                            5 => 45673,
                          ], 
                    function ($v) use($arr) {
                      return array_count_values($arr)[$v] == 2;
                    }
                  )
    )
  );

如果您需要从0开始重新索引元素-将array_values()应用于array_unique()结果

答案 4 :(得分:0)

您可以将array_filterarray_count_values一起使用

$arr = [
  0 => "556878",
  1 => "12345",
  2 => "12345",
  3 => "234567",
  4 => "45673",
  5 => "45673"
];
$N = 2;
$final_result = array_filter(array_count_values($arr), function($v) use($N){
  return  $v==$N;
});
print_r($final_result);

输出:

Array
(
 [12345] => 2
 [45673] => 2
)

Live Example