我有阵列,有些也是多维的。我需要一种方法来知道所有值是否为NULL。确定数组的所有值(以及该数组中的数组值)是否为NULL的最有效和最有效的方法是什么?
基本上:搜索数组,如果所有值都为NULL,则$ flag = true
编辑:这些值是从MySQL数据库中提取的,其中NULL位于MySQL的上下文中,如果这会产生影响。
答案 0 :(得分:3)
如果我记得db空字段在php中变为空字符串,那么你可以使用这样的函数:
function isEmptyArray($array){
foreach($array as $val)
if((is_array($val) && !isEmptyArray($val))||(!is_array($val) && $val!="")) return false;
return true;
}
答案 1 :(得分: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; }
对于多维数组,此将失败,如果自动转换为false的零或其他值是数组中的有效值,如果是这种情况,则必须构建递归回调函数并传递它是array_filter.
的第二个参数答案 2 :(得分: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;
}
答案 3 :(得分:0)
您可能希望查看array_filter()函数,默认情况下会删除等于false的值(包括NULL)。
我不确定它是否适用于多维数组,但它可以选择使用回调函数来轻松处理它。
长话短说,如果你在数组上运行array_filter并返回一个空数组,那么你的所有值都是Null或等于false - 如果你需要严格区分这些值,那么你应该使用回电话。
答案 4 :(得分: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中的效率相当低)。