PHP数组搜索问题

时间:2009-08-30 18:47:21

标签: php arrays

我有阵列,有些也是多维的。我需要一种方法来知道所有值是否为NULL。确定数组的所有值(以及该数组中的数组值)是否为NULL的最有效和最有效的方法是什么?

基本上:搜索数组,如果所有值都为NULL,则$ flag = true

编辑:这些值是从MySQL数据库中提取的,其中NULL位于MySQL的上下文中,如果这会产生影响。

5 个答案:

答案 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中的效率相当低)。