有没有方法来检查所有数组项是否为“0”?

时间:2011-08-14 15:22:10

标签: php arrays

我有一个数组

$data = array( 'a'=>'0', 'b'=>'0', 'c'=>'0', 'd'=>'0' );

我想检查所有数组值是否为零。

if( all array values are '0' ) {

   echo "Got it";

} else {

  echo "No";
}

由于

10 个答案:

答案 0 :(得分:21)

我想您可以使用array_filter()来获取所有非零项目的数组;并在结果数组上使用empty(),以确定它是否为空。


例如,使用示例数组:

$data = array( 
       'a'=>'0',
       'b'=>'0',
       'c'=>'0',
       'd'=>'0' );

使用以下代码部分:

$tmp = array_filter($data);
var_dump($tmp);

会显示一个空数组,不包含非零元素:

array(0) {
}

使用类似的东西:

if (empty($tmp)) {
    echo "All zeros!";
}

会得到以下输出:

All zeros!


另一方面,使用以下数组:

$data = array( 
    'a'=>'0', 
    'b'=>'1', 
    'c'=>'0', 
    'd'=>'0' );

$ tmp数组将包含:

array(1) {
  ["b"]=>
  string(1) "1"
}

因此,不会是空的。


请注意,不将回调作为第二个参数传递给array_filter()将起作用,因为(引用)

  

如果没有提供回调,则所有输入条目等于FALSE(参见   converting to boolean)将被移除。

答案 1 :(得分:6)

怎么样:

// ditch the last argument to array_keys if you don't need strict equality
$allZeroes = count( $data ) == count( array_keys( $data, '0', true ) );

答案 2 :(得分:3)

使用此:

$all_zero = true;
foreach($data as $value)
    if($value != '0')
    {
        $all_zero = false;
        break;
    }
if($all_zero)
    echo "Got it";
else
    echo "No";

这比使用其他答案中建议的array_filter快得多(运行时间)。

答案 3 :(得分:2)

你可以循环数组并退出第一个非零值(循环直到非零,所以非常快,当非零值在数组的开头)时:

function allZeroes($arr) {
  foreach($arr as $v) { if($v != 0) return false; }
  return true;
}

或者,使用array_sum(循环完成数组一次):

function allZeroes($arr) {
  return array_sum($arr) == 0;
}

<击>

@fireeyedboy对求和有一个非常好的观点:如果涉及负值,结果很可能为零,即使数组包含非零值

答案 4 :(得分:1)

另一种方式:

if(array_fill(0,count($data),'0') === array_values($data)){
    echo "All zeros";
}

答案 5 :(得分:1)

另一个快速解决方案可能是:

if (intval(emplode('',$array))) {
  // at least one non zero array item found
} else {
  // all zeros
}

答案 6 :(得分:0)

if (!array_filter($data)) {
   // empty (all values are 0, NULL or FALSE)
}
else {
   // not empty
}

答案 7 :(得分:0)

我参加派对有点晚了,但是这个怎么样:

$testdata = array_flip($data);
if(count($testdata) == 1 and !empty($testdata[0])){
    // must be all zeros
}

类似的技巧使用array_unique()。

答案 8 :(得分:0)

您可以使用此功能

function all_zeros($array){//true if all elements are zeros
    $flag = true;
    foreach($array as $a){
        if($a != 0)
            $flag = false;
    }
    return $flag;
}

答案 9 :(得分:0)

您可以使用以下这种单线格式:(Demo

var_export(!(int)implode($array));

$array = [0, 0, 0, 0];返回true

$array = [0, 0, 1, 0];返回false

这可能执行得很好,因为只有一个函数调用。

我的解决方案在内插时不使用胶水,然后将生成的字符串显式转换为整数,然后使用否定将0评估为true,将非零评估为false。 (通常,0评估为false,所有其他值评估为true。)

...但是如果我是为了工作而这样做,我可能只会使用!array_filter($array)