php - 如何检查多个串联数组的值都是零?

时间:2016-07-20 06:55:12

标签: php arrays

让我们说我有一个数组如下,

$array = array(
  'foo1' => 
    array (
      'a' =>  0,
      'b' =>  0, ),
  'bar'=> 
    array (
      'a' =>  0,
      'c' =>  1, ),
);

如何检查数组中的值是否全部为0?感谢。

5 个答案:

答案 0 :(得分:4)

如果要检查整个数组,可以使用array_sum绘制元素。然后使用简单的if

$check = array_sum(array_map(function($e){
    return array_sum($e);
}, $array));

if($check > 0) {
    // do what you have to do
}

虽然这是可以接受的,但不考虑数组索引,您可以将另一个多维与[0, 0]进行比较,每个批次都使用array_filter。然后,如果两个计数匹配,则全部为零:

$check = array_filter($array, function($v){
    $count = count($v);
    return array_fill(0, $count, 0) === array_values($v);
});

if(count($check) !== count($array)) {
    // not all zero
}

或SPL的另一种方式:

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$found_non_zero = false;
foreach($it as $val) {
    if($val !== 0) {
        $found_non_zero = true;
        break;
    }
}

if($found_non_zero) {
    // do something
}

@ array_walk_recursive @splash建议:

$found_non_zero = false;
array_walk_recursive($array, function($e){
    if($e !== 1) {
        $found_non_zero = true;
        break;
    }
});

答案 1 :(得分:0)

如果它是2D数组,您可以迭代所有值并使用布尔值来检查所有值是否为零。

$check=0;  
foreach($array as $firstArray){
  foreach($firstArrayas as $value){
    if($value!=0){
     $check = 1;
    }
  } 
 } 

if($check===1){
 echo "One of the values is not zero";
}
else{
  echo "All values are zero";
}

答案 2 :(得分:0)

<?php
$array = array(
 'foo1' => 
   array (
    'a' =>  0,
    'b' =>  0, ),
'bar'=> 
  array (
    'a' =>  0,
    'c' =>  1, ),
);

$sum = 0;
foreach ($array as $inner):
    $sum = $sum + array_sum($inner);
    if($sum > 0):
        break; // if already greater than zero , no need to continue looping
    endif;
endforeach;

echo ($sum >0)?"Not All Zero":"All Zero";

?>

答案 3 :(得分:0)

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

例如,使用示例数组:

$array = array(
  'foo1' => 
    array (
      'a' =>  0,
      'b' =>  0, ),
  'bar'=> 
    array (
      'a' =>  0,
      'c' =>  1, ),
);

使用以下代码部分:

$data = array_filter($array);

if (empty($data)) {
    echo "Zeros";
} else {
    echo "No zeros";
}

输出“Zeros”或“No zeros”。

答案 4 :(得分:0)

一种方法是

<?php
$test = ["a"=>[0,0], "b"=>[0,1]];
foreach($test as $key=>$value){
  if (array_sum($value)==0) {
       echo "$key as all zeros\n";
  }
}
?>

点击此处:https://eval.in/608382