php检查数组中至少有两个大于0的值

时间:2012-02-27 08:03:47

标签: php arrays

我有一个PHP数组。

让我们说

$array = array(20,1,0, 0, 0,0,8);

我需要检查数组中是否至少有两个值可用大于0。举个例子。

$array = array(20,1,0, 0, 0,0,8); 
// True - Above array has at least two values which is > 0

$array = array(0,9,0, 0, 0,0,0); 
// False- Above array doesn't have at least two values which is > 0

我想知道是否有任何简单的方法可以在不循环数组的情况下完成此任务。

谢谢。

4 个答案:

答案 0 :(得分:9)

您可以使用array_filter()将数组缩减为非零项目,然后计算它们:

$array = array(20, 0, 0, 0, 0, 0, 0);
$temp = array_filter($array, function($value){
    return $value > 0;
});
echo count($temp) >= 2 ? "true" : "false";

注意:对于不支持匿名函数的旧版PHP,您需要单独创建函数并将其名称作为字符串传递给array_filter()函数。

答案 1 :(得分:2)

尝试这种方法,使用array_filter,它基本上过滤了你的元素,然后你有你想要的计数

function positive($var)
{
    // returns whether the input integer positive
    return($var > 0);
}

print_r(array_filter($array, "positive"));

答案 2 :(得分:1)

没有循环?好吧,你可以

<?php
$array = array(20,1,0, 0, 0,0,8);
rsort($array);
if ($array[0] > 0 && $array[1] > 0) {
  // yippie
} else {
  // oh no!
}

但这不会比

更好
<?php
$array = array(20,1,0, 0, 0,0,8);
$greaterThanZero = 0;
foreach ($array as $v) {
  if ($v > 0) {
    $greaterThanZero++;
    if ($greaterThanZero > 1) {
      $greaterThanZero = true;
      break;
    }
  }
}

if ($greaterThanZero === true) {
  // yippie
} else {
  // oh no!
}

第一个解决方案可能会稍微减少代码,但sort()比foreach更昂贵(意味着更慢)。你看,foreach可以在它达到两个积极点击后停止。 sort()将对整个数组进行排序。建议array_reduce()的答案也将遍及整个数组。

以允许“快速退出”的方式设计算法。当您已经知道答案时,为什么要继续处理数据?没有意义,只浪费资源。

答案 3 :(得分:0)

您可能想要使用array_reduce或类似的东西

function reducer($accumulator, $elem){
    if ($elem>0)
        $accumulator++;
    return $accumulator;
}

$array = array(9,0,0,0);
$greater_than_zero = array_reduce($array, 'reducer', 0);