2011-08-14 183 views

回答

15

我想你可以使用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)將被刪除。

+0

不客氣:-) –

+2

但沒有適當的回調,空字符串/空數組/空值/ FALSE/NULL值的數組也將被視爲零數組。 –

+0

true;這可能會或可能不會被OP所接受;所以,感謝您的評論! –

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在其他答案建議。

+0

嗯。我知道這種方法,但我想要一個快速的一行方法..無論如何,謝謝.. – Student

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有一個很好的點大約總結:如果負值參與,結果很可能是零,即使陣列由非零值

+1

我也想過'array_sum',但'array('a'=> 2,'b'=> -2)'會導致'0'。 –

+0

@fireeyedboy:非常好的一點! – knittl

1

另一種方式:

if(array_fill(0,count($data),'0') === array_values($data)){ 
    echo "All zeros"; 
} 
5

如何約:

// ditch the last argument to array_keys if you don't need strict equality 
$allZeroes = count($data) == count(array_keys($data, '0', true)); 
0
if (!array_filter($data)) { 
    // empty (all values are 0, NULL or FALSE) 
} 
else { 
    // not empty 
} 
0

我有點遲到了,但這個怎麼樣:

$testdata = array_flip($data); 
if(count($testdata) == 1 and !empty($testdata[0])){ 
    // must be all zeros 
} 

類似的技巧使用array_unique()。

0

您可以使用此功能

function all_zeros($array){//true if all elements are zeros 
    $flag = true; 
    foreach($array as $a){ 
     if($a != 0) 
      $flag = false; 
    } 
    return $flag; 
} 
1

另一種快速的解決方案可能是:

if (intval(emplode('',$array))) { 
    // at least one non zero array item found 
} else { 
    // all zeros 
} 
相關問題