PHP:如何在不循环的情况下计算值大于10的数组数量?

6
有没有办法在不使用循环(foreach)的情况下计算数组中值大于10的数量?
$arr=array(5,7,11,67,4,12,15);
$wanted_output=4

“count array values more than 10” 是什么意思?你能举个例子吗? - Baba
如果您想计算元素的数量,请使用count($array)。 - Deepu
@Baba,我认为他需要计算值的数量。 - GautamD31
@Gautam3164 如果他只是想要计算数组,那怎么办?问题太模糊了。 - Baba
1
使用count()与array_filter(),并使用一个回调函数,如果值>10,则返回TRUE... 这仍然是一个循环,但是它是一个内部循环。 - Mark Baker
我不知道为什么有人会点踩。请评论下踩的原因。 - Logan
5个回答

9

只需使用 array_reduce 函数,就不需要使用 count 函数。

echo array_reduce($arr, function ($a, $b) {
    return ($b > 10) ? ++$a : $a;
}); // returns 4

$a 用作计数器,$b 是单个数组值。 - Mark Baker
聪明的做法是使用 and 而不是 && 来处理运算符优先级。 - Mark Baker
@Vivek - 如果你颠倒它们的顺序,你会得到错误的结果... $a 从零开始,所以永远不会增加,因此你总会得到0。 - Mark Baker
我的问题是为什么用户定义函数的第二个参数将数组的值映射? - Vivek Sadh
@Vivek - 因为PHP的开发者选择以那种方式编写它。 - Mark Baker
显示剩余3条评论

2
$minVal = 10;
$counter = count(
    array_filter(
        $myArray,
        function($value) use ($minVal) {
            return $value > $minVal;
        }
    )
);

1

从PHP7.4开始,您可以使用箭头函数语法并避免使用use()语法将最小阈值传递到array_reduce()函数中。

代码:(演示

$array = [5, 7, 11, 67, 4, 12, 15];
$min = 10;
echo array_reduce($array, fn($carry, $item) => $carry + ($item > $min), 0);
// output: 4

$item$min 之间的 true|false 评估分别等于 1|0。


0

尝试使用 array_count_values,例如:

print_r(array_count_values($my_array));

如果他需要计算小于10的值,请尝试以下方法。
$my_array = array_filter($my_array, function ($n) {
    return $n > 10;
});
echo count($my_array);

0

使用array_count_values函数:

$array = array(1, 38, 1, 38,35);
print_r(array_count_values($array));

输出:-

Array
(
    [1] => 2
    [38] => 2
    [35] => 1
)

使用array_filter函数:

$arraycount = array_filter($array, function ($n) {
    return $n > 10;
});
echo count($arraycount);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接