【问题标题】:How to check if a multi-dimensional array only contains empty values?如何检查多维数组是否只包含空值?
【发布时间】:2013-07-06 19:12:50
【问题描述】:

我环顾四周,找不到答案,所以我想知道我是否包含这样的数组..

$array['foo']['bar'][1] = '';
$array['foo']['bar'][2] = '';
$array['foo']['bar'][3] = '';
$array['foo']['bar'][4] = '';

如何检查所有值是否为空?我尝试执行以下操作:

if (empty($array['foo']['bar'])) {
    // Array empty
}

但正如预期的那样,它不起作用。

我该怎么做?

【问题讨论】:

    标签: php arrays multidimensional-array is-empty


    【解决方案1】:

    如果您想检查是否所有已填充的值都可以使用

     if(call_user_func_array("isset", $array['foo']['bar']))
    

    尽管您可以使用带有闭包的数组 reduce 来完成您想要做的事情

     if(array_reduce($array, function(&$res, $a){if ($a) $res = true;}))
    

    请注意,这只适用于 php 5.3+

    【讨论】:

    • 嗯,看看php.net 站点上的示例,它不是将数组值拆分为单独的变量,因此这会将 4 个值传递给 isset 并且无效吗?
    【解决方案2】:

    $array['foo']['bar'] 不是空的,因为它实际上是array(1=>'',2=>'',3=>'',4=>'')

    您需要对其执行foreach 循环以检查它是否确实为空。

    $arr_empty = true;
    foreach ($array['foo']['bar'] as $arr) {
        if (!empty($arr)) {
            $arr_empty = false;
        }
    }
    //$arr_empty is now true or false based on $array['foo']['bar']
    

    【讨论】:

      【解决方案3】:

      一个简短的替代方案是:

      if (empty(implode($array['foo']['bar']))) {
        // is empty
      }
      

      请注意,某些单个值可能会被视为空值。见empty()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-03
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        相关资源
        最近更新 更多