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

Stu*_*ent 7 php arrays

我有一个阵列

$data = array( 'a'=>'0', 'b'=>'0', 'c'=>'0', 'd'=>'0' );
Run Code Online (Sandbox Code Playgroud)

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

if( all array values are '0' ) {

   echo "Got it";

} else {

  echo "No";
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Pas*_*TIN 25

我想你可以使用array_filter()得到一个非零的所有项目的数组; 并empty()在结果数组上使用,以确定它是否为空.


例如,使用示例数组:

$data = array( 
       'a'=>'0',
       'b'=>'0',
       'c'=>'0',
       'd'=>'0' );
Run Code Online (Sandbox Code Playgroud)

使用以下代码部分:

$tmp = array_filter($data);
var_dump($tmp);
Run Code Online (Sandbox Code Playgroud)

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

array(0) {
}
Run Code Online (Sandbox Code Playgroud)

并使用这样的东西:

if (empty($tmp)) {
    echo "All zeros!";
}
Run Code Online (Sandbox Code Playgroud)

会得到以下输出:

All zeros!
Run Code Online (Sandbox Code Playgroud)


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

$data = array( 
    'a'=>'0', 
    'b'=>'1', 
    'c'=>'0', 
    'd'=>'0' );
Run Code Online (Sandbox Code Playgroud)

$ tmp数组将包含:

array(1) {
  ["b"]=>
  string(1) "1"
}
Run Code Online (Sandbox Code Playgroud)

而且,因此,不会是空的.


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

如果没有提供回调,则将删除所有输入等于FALSE的条目(请参阅 转换为布尔值).

  • 但是如果没有正确的回调,空字符串/空数组/ FALSE/NULL值的数组也将被视为零数组. (2认同)

Dec*_*ler 6

怎么样:

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