如何在多维数组中检查任何值是否为空?

时间:2017-12-22 08:31:08

标签: php arrays multidimensional-array

如何在多维数组中检查ANY值是否为空。我正在网上搜索并找到不同的解决方案,但不是我需要的。解决方案可以是所有值或某些特定值,也可以过滤掉某些值等等。

事情是,我有一个表格,可以有2或10个输入字段,他们重复姓名和包输入字段,但我可以有多个,所有这些都需要填写,所以如果有的话数组中的字段为空我应该找到它并将错误返回给用户,因此他必须填写所有数组字段。

[povratna_odrasli] => Array
    (
        [1] => Array
            (
                [ime] => 
                [prezime] => 
                [prtljag] => bez
            )

        [2] => Array
            (
                [ime] => 
                [prezime] => 
                [prtljag] => bez
            )

        [3] => Array
            (
                [ime] => 
                [prezime] => 
                [prtljag] => bez
            )

    )

[povratna_deca] => Array
    (
        [1] => Array
            (
                [ime] => 
                [prezime] => 
                [prtljag] => bez
                [godine] => 0
            )

    )

这基本上是在提交表单时数组的外观

1 个答案:

答案 0 :(得分:4)

您应该能够使用array_walk_recursive遍历数组及其子数组。

$arr=array(
    'povratna_odrasli'  =>  array(
        array('ime' =>  '','prezime'=>'','prtljag'=>'bez'),
        array('ime' =>  '','prezime'=>'','prtljag'=>'baz'),
        array('ime' =>  'knickers','prezime'=>'','prtljag'=>'baz')
    ),
    'povratna_deca'     =>  array(
        array('ime' =>  '', 'prezime'=>'', 'prtljag'=>'bez', 'godine'=>0)
    )
);
$output=array();
$status=array_walk_recursive( $arr, function($v,$k,$o){
    if( empty( $v ) && $v!==0 )$o[$k]=$v;
},&$output );

if( !empty( $output ) )echo '<pre>',print_r($output,true),'</pre>';

哪个输出:

Array
(
    [ime] => 
    [prezime] => 
)

如果$output var不为空,那么您知道以某种方式进一步处理。

您可以在PHP site

上找到array_walk_recursive的完整说明以及示例用法

更高版本的PHP在通过引用传递第三个arg时抛出"PHP Fatal error: Call-time pass-by-reference has been removed": - 而是将$output变量声明为回调中的全局变量

$status=array_walk_recursive( $arr, function($v,$k){
    global $output;
    if( empty( $v ) && $v!==0 )$output[$k]=$v;
} );