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

问题描述 投票:1回答:1

如何在多维数组中检查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
            )

    )

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

php arrays multidimensional-array
1个回答
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不为空,那么你知道以某种方式进一步处理。

你可以在array_walk_recursive找到PHP site的完整描述,包括示例用法

更高版本的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;
} );
© www.soinside.com 2019 - 2024. All rights reserved.