在2D数组中检查值是否为空的最简单方法是什么?

时间:2011-07-13 15:37:30

标签: php arrays multidimensional-array associative-array

例如,我有一个这样的数组:

  

array(4)(“a”=> string(0)“”“b”=> string(0)“”“c”=> string(0)“”“d”=> string(0)“”)

给定值都不应为空。

目前,我用这个:

if (!empty($_POST['x']['a']) && !empty($_POST['x']['b']) && !empty($_POST['x']['c']) && !empty($_POST['x']['d']))

......从可读性方面来说很糟糕。

注意:数组是关联的。

4 个答案:

答案 0 :(得分:6)

count(array_filter($_POST['x'])) === 4

一些解释:Empty() is the Opposite of a Boolean Variablearray_filter删除所有等于false的元素(即!empty()),此计数必须与4个元素的期望相匹配。

如果元素的数量由提交的元素总数(空或不是)定义,请使用count()代替幻数:

if (count(array_filter($_POST['x'])) === count($_POST['x']))
{
    echo 'No empty elements in $_POST["x"]!';
}

答案 1 :(得分:0)

编辑:(回应评论)

你可以将“uncool”逻辑封装在一个函数中并用一行代码调用它:

if ( check_for_empty_values( $_POST ) ) { // Do something }

封装的检查逻辑:

function check_for_empty_values( $data ) {
    $valid = true;
    foreach ( $data as $element ) {
        if ( is_array( $element) ) {
            foreach ( $element as $subelement ) {
                if ( empty( $subelement ) ) {
                    $valid = false;
                }
            }
        }
    }

    return $valid;
}

答案 2 :(得分:0)

您检查了array_reduce函数吗?

function all_empty($v,$w){
   $v .= $w;
   return $v;
}
if(array_reduce($_POST['x'],'all_empty','')==''){

我没有测试过,但你可以尝试一下

答案 3 :(得分:-2)

for($_POST as $key => $value) {
    if( !empty($value) ) {
      // Do stuff.    

    }
}