如何检查多维数组中的所有值是否为空

问题描述 投票:0回答:2

我有一个表单将多维数组发布到我的 PHP 脚本,我需要知道数组中的所有值是否为空。

这是我的数组:

$array[] = array('a'=>'',
                 'b'=>array('x'=>''),
                 'c'=>array('y'=>array('1'=>'')),
                 'd'=>'');

我尝试使用 array_reduce(),但它只是返回一个数组:

echo array_reduce($array, "em");

function em($a,$b){
    return $a.$b;
}

有什么想法吗?

php arrays multidimensional-array array-reduce
2个回答
5
投票

我注意到这个已经存在了一段时间了,这是一个运行良好的自定义函数。

function emptyArray($array) {
  $empty = TRUE;
  if (is_array($array)) {
    foreach ($array as $value) {
      if (!emptyArray($value)) {
        $empty = FALSE;
      }
    }
  }
  elseif (!empty($array)) {
    $empty = FALSE;
  }
  return $empty;
}

如果数组中的所有项目都为空,则该函数将返回 true,但如果数组中的一项不为空,则该函数将返回 false。

用途:

if (emptyArray($ARRAYNAME)) {
  echo 'This array is empty';
}
else {
  echo 'This array is not empty';
}

0
投票

这是一个精简的递归函数,用于检查不确定深度数组的所有值是否仅包含错误值(空字符串、空值、零等)。

  • 每次迭代时,如果
    $v
    是一个数组,则对其进行递归调用并返回其布尔结果;否则检查
    $v
    的布尔值
  • 如果条件表明找到非空值,则停止任何迭代或递归,并将
    false
    值沿树向上冒泡。

代码:(演示

function empty_r(array $array): bool
{
    foreach ($array as $v) {
        if (is_array($v) ? !empty_r($v) : $v) {
            return false;
        }
    }
    return true;
}
 
var_export(empty_r($array));

对于任何想要迭代对象的人,只需在

|| is_object($v)
检查后添加
is_array()
即可。

© www.soinside.com 2019 - 2024. All rights reserved.