PHP检查"多维数组(array([key] => value))"值为空

时间:2018-05-30 14:47:12

标签: php arrays laravel-5

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

Array
(
[51] => Array
    (
        [5] => 
        [2] => 
        [8] => 
    )

[78] => Array
    (
        [18] => 
        [23] => 
        [21] => 
    )
)

澄清和沟通:

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

我想检查所有value是否为空,在本例中它们是否为空,对于1维数组,它将类似于empty($array)

我已经尝试了array_filter(),但如果值在数组内部键内的键内,则无法提供服务。

我知道我可以使用foreach再次输入key1然后foreach输入key1_1并递归检查值是否为空并返回false并返回false只要值不为空,就打破循环。

但PHP中有没有其他方法或方法可以检查这些值?类似于empty($array)但类似于数组并只检查value?或具有empty(array_filter(array_filter($array)))逻辑的东西?

或除了使用foreach

手动递归检查每个值之外没有别的办法

注意:我使用的是Laravel 5.5,PHP 7.1.9

注意:我没有尝试如果找到一个特定的值为null,我问的是PHP中是否有内置方法或者比我用来检查值是否全部为null的方法更简单或不。

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用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

答案 1 :(得分:1)

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)

如果您只是想获取数组中的空插槽数,这应该可以使用。

$myArray = ["bob", "fred", "bill", "mary", "", "jane", ""];

$count = 0;
foreach($myArray as $key=>$value) {


if(!$value) {
$count++;
}


}
echo $count;