我有數組,有些也是多維的。我需要一種方法來知道所有的值是否爲NULL。什麼是確定數組的所有值(以及該數組內的數組的值)是否爲NULL的最有效和最有效的方式?PHP數組搜索問題
所以基本上:搜索陣列,如果所有值都爲NULL,$標誌=真
編輯:值正在從一個MySQL數據庫,在那裏NULL是在MySQL的情況下拉出,這樣是否區別。
我有數組,有些也是多維的。我需要一種方法來知道所有的值是否爲NULL。什麼是確定數組的所有值(以及該數組內的數組的值)是否爲NULL的最有效和最有效的方式?PHP數組搜索問題
所以基本上:搜索陣列,如果所有值都爲NULL,$標誌=真
編輯:值正在從一個MySQL數據庫,在那裏NULL是在MySQL的情況下拉出,這樣是否區別。
如果我記得很清楚分貝空字段成爲空字符串在PHP所以你可以使用這樣的函數:
function isEmptyArray($array){
foreach($array as $val)
if((is_array($val) && !isEmptyArray($val))||(!is_array($val) && $val!="")) return false;
return true;
}
取決於你會使用該標誌,但我認爲最好是查詢數據庫,所以它僅檢索非空值,像
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.
可以是完成遞歸:
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;
}
你可能想看看array_filter()功能,默認情況下它剔除了等同於假值(包括NULL)。
我不確定它是否可以像多維數組一樣工作,但它可以選擇使用回調函數,這很容易讓您處理它。長話短說,如果你在數組上運行array_filter,並且返回一個空數組,那麼你所有的值都是Null或者等於false - 如果你需要在嚴格意義上區分這些值,那麼你應該使用回電。
您可以使用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相當低效的信譽)的優點。
基本上是正確的,但是這不起作用...傳入一個包含null的數組,它會在第一個語句返回false ... – back2dos 2009-08-30 19:08:50
fixed ...我希望:P謝謝 – Aziz 2009-08-30 19:41:12