我正在尝试从数组中获取那些在数组中重复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"
]
我正在寻找获得期望结果的最有效方法。有人可以帮我吗?
谢谢。
答案 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));
答案 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)
}
答案 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_filter
与array_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
)