2009-08-30 90 views
0

我有數組,有些也是多維的。我需要一種方法來知道所有的值是否爲NULL。什麼是確定數組的所有值(以及該數組內的數組的值)是否爲NULL的最有效和最有效的方式?PHP數組搜索問題

所以基本上:搜索陣列,如果所有值都爲NULL,$標誌=真

編輯:值正在從一個MySQL數據庫,在那裏NULL是在MySQL的情況下拉出,這樣是否區別。

回答

3

如果我記得很清楚分貝空字段成爲空字符串在PHP所以你可以使用這樣的函數:

function isEmptyArray($array){ 
    foreach($array as $val) 
     if((is_array($val) && !isEmptyArray($val))||(!is_array($val) && $val!="")) return false; 
    return true; 
} 
0

取決於你會使用該標誌,但我認爲最好是查詢數據庫,所以它僅檢索非空值,像

select col1,col2,col3 from table where col1 is not null and col2 is not null 
and col3 is not null 

這就是說,一個簡單的方法做一些事情像在PHP將

//array_filter filters values that evaulate to fals 
$result = array_filter($input); 
if (count($result) == 0) { $flag = true; } 

將失敗多維數組,如果是那些獲得自動轉換爲假零或其它數值數組中有效的值,如果這是你甲肝的情況下E要構建一個遞歸回調函數,並把它作爲第二個參數來array_filter.

0

可以是完成遞歸:

arrayIsFullyNull ($arr) 
{ 
    if (is_array($arr)) 
     foreach ($arr as $val) 
     if (!arrayIsFullyNull($val)) 
      return false; 
    else if (!is_null($arr)) 
     return false; 
    else 
     return false; // it's not null, and not array => value 

    return true; 
} 
+0

基本上是正確的,但是這不起作用...傳入一個包含null的數組,它會在第一個語句返回false ... – back2dos 2009-08-30 19:08:50

+0

fixed ...我希望:P謝謝 – Aziz 2009-08-30 19:41:12

0

你可能想看看array_filter()功能,默認情況下它剔除了等同於假值(包括NULL)。

我不確定它是否可以像多維數組一樣工作,但它可以選擇使用回調函數,這很容易讓您處理它。長話短說,如果你在數組上運行array_filter,並且返回一個空數組,那麼你所有的值都是Null或者等於false - 如果你需要在嚴格意義上區分這些值,那麼你應該使用回電。

0

您可以使用RecursiveArrayIterator遍歷所有值(嵌套數組的樹葉)。

未經測試的代碼:

function isNullOrNestedArrayOfNulls($array) 
{ 
    if (is_null($array) 
    { 
    return true; 
    } 
    else if (!is_array($array)) 
    { 
    return false; 
    } 

    $allNull = true; 
    $iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), 
             RecursiveIteratorIterator::LEAVES_ONLY); 

    while ($iter->valid()) 
    { 
    if (!is_null($iter->current()) 
    { 
     $allNull = false; 
     break; 
    } 
    } 

    return $allNull; 
} 

這將具有避免遞歸函數(其具有作爲在PHP相當低效的信譽)的優點。