Is there a method to check if all array items are '0'?

I suppose you could use array_filter() to get an array of all items that are non-zero ; and use empty() on that resulting array, to determine if it's empty or not.


For example, with your example array :

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

Using the following portion of code :

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

Would show you an empty array, containing no non-zero element :

array(0) {
}

And using something like this :

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

Would get you the following output :

All zeros!


On the other hand, with the following array :

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

The $tmp array would contain :

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

And, as such, would not be empty.


Note that not passing a callback as second parameter to array_filter() will work because (quoting) :

If no callback is supplied, all entries of input equal to FALSE (see converting to boolean) will be removed.


How about:

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

Use this:

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

This is much faster (run time) than using array_filter as suggested in other answer.

Tags:

Php

Arrays