让我们说我有一个数组如下,
$array = array(
'foo1' =>
array (
'a' => 0,
'b' => 0, ),
'bar'=>
array (
'a' => 0,
'c' => 1, ),
);
如何检查数组中的值是否全部为0?感谢。
答案 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";
}
}
?>