2009-08-30 83 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相当低效的信誉)的优点。