我有一個數組是否有方法檢查所有數組項是否爲'0'?
$data = array('a'=>'0', 'b'=>'0', 'c'=>'0', 'd'=>'0');
我要檢查,如果所有的數組值均爲零。
if(all array values are '0') {
echo "Got it";
} else {
echo "No";
}
感謝
我有一個數組是否有方法檢查所有數組項是否爲'0'?
$data = array('a'=>'0', 'b'=>'0', 'c'=>'0', 'd'=>'0');
我要檢查,如果所有的數組值均爲零。
if(all array values are '0') {
echo "Got it";
} else {
echo "No";
}
感謝
我想你可以使用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)將被刪除。
不客氣:-) –
但沒有適當的回調,空字符串/空數組/空值/ FALSE/NULL值的數組也將被視爲零數組。 –
true;這可能會或可能不會被OP所接受;所以,感謝您的評論! –
使用此:
$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
在其他答案建議。
嗯。我知道這種方法,但我想要一個快速的一行方法..無論如何,謝謝.. – Student
可以循環第一非零值的陣列和退出(循環,直至非爲零,因此相當快,當一個非零值在數組的開頭):
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有一個很好的點大約總結:如果負值參與,結果很可能是零,即使陣列由非零值
我也想過'array_sum',但'array('a'=> 2,'b'=> -2)'會導致'0'。 –
@fireeyedboy:非常好的一點! – knittl
另一種方式:
if(array_fill(0,count($data),'0') === array_values($data)){
echo "All zeros";
}
如何約:
// ditch the last argument to array_keys if you don't need strict equality
$allZeroes = count($data) == count(array_keys($data, '0', true));
if (!array_filter($data)) {
// empty (all values are 0, NULL or FALSE)
}
else {
// not empty
}
我有點遲到了,但這個怎麼樣:
$testdata = array_flip($data);
if(count($testdata) == 1 and !empty($testdata[0])){
// must be all zeros
}
類似的技巧使用array_unique()。
您可以使用此功能
function all_zeros($array){//true if all elements are zeros
$flag = true;
foreach($array as $a){
if($a != 0)
$flag = false;
}
return $flag;
}
另一種快速的解決方案可能是:
if (intval(emplode('',$array))) {
// at least one non zero array item found
} else {
// all zeros
}
將數組總是由4個元素? –
@fireeyedboy:否 – Student