我有一个数组
$data = array( 'a'=>'0', 'b'=>'0', 'c'=>'0', 'd'=>'0' );
我想检查所有数组值是否为零。
if( all array values are '0' ) {
echo "Got it";
} else {
echo "No";
}
由于
答案 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)