代码之家  ›  专栏  ›  技术社区  ›  Abed Rawas

php检查“多维数组(array([key]=>value))”值是否为空

  •  0
  • Abed Rawas  · 技术社区  · 7 年前

    我把这个数组从我的视图发布到我的控制器中,我试图检查数组中是否有任何值。 数组被初始化并发送到视图,在视图中,我有一个要填充输入的表,如果用户不填充该表并提交表单,数组将返回如下:

    Array
    (
    [51] => Array
        (
            [5] => 
            [2] => 
            [8] => 
        )
    
    [78] => Array
        (
            [18] => 
            [23] => 
            [21] => 
        )
    )
    

    澄清和沟通:

    array(
       [key1]=>array
               (
                  [key1_1]=>value
               )
    )
    

    我想检查一下 value 是否为空,与本例中的类似 empty($array) 对于一维数组。

    我试过了 array_filter() 但如果值位于数组中键的内部,则不起作用。

    我知道我可以用 foreach 进入 key1 然后 foreach公司 再次进入 key1_1

    但是,php中是否有其他方法或方法允许检查这些值?类似于 空($array) 但进入阵列检查 价值 只有?或者有逻辑的东西 empty(array_filter(array_filter($array))) ?

    或者除了使用 foreach公司 ?

    注意:我使用的是laravel 5.5,php 7.1.9

    注意:我不是在尝试find a specific value是否为空,而是在问php中是否有内置的方法,或者比我用来检查值是否都为空的方法更简单的方法。

    3 回复  |  直到 7 年前
        1
  •  1
  •   deceze    7 年前

    array_map('array_filter', $array) 将移除所有内部空值,使数组类似于:

    [
        51 => [],
        78 => [
            18 => 'not empty'
        ]
    ]
    

    然后 array_filter 再次删除所有空数组。总而言之:

    if (!array_filter(array_map('array_filter', $array))) {
        echo 'The array is completely empty';
    }
    
        2
  •  1
  •   The fourth bird    7 年前

    一种方法是 array_reduce 并传递一个空数组作为起始值。然后在回调函数中使用 array_merge .

    最后你可以用 array_filter 删除空条目,然后 count 最终数组中的项。

    $arrays = [
        51 => [
            5 => "",
            2 => "",
            8 => "77"
        ],
        78 => [
            18 => "",
            23 => "99",
            21 => ""
        ]
    ];
    
    $result = array_reduce($arrays, function($carry, $item) {
        $carry = array_merge($carry, $item);
        return $carry;
    }, []);
    

    Test with all empty values

    Test with values

        3
  •  -1
  •   tim    7 年前

    如果您只想获取数组中的空插槽数,那么这应该是可行的。

    $myArray = ["bob", "fred", "bill", "mary", "", "jane", ""];
    
    $count = 0;
    foreach($myArray as $key=>$value) {
    
    
    if(!$value) {
    $count++;
    }
    
    
    }
    echo $count;