我有数组,有些也是多维的。我需要一种方法来知道所有的值是否为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