【问题标题】:Loop through multidimensional array and unset matching items循环遍历多维数组并取消设置匹配项
【发布时间】:2018-04-05 01:16:56
【问题描述】:

我有一个多维数组,我想遍历每个级别的每个项目,并删除“children”和“attribute_id”都为空的所有项目(在本例中,最后 2 个项目的键为 56 和 70) .

Array
(
    [11] => Array
        (
            [page_id] => 11
            [page_parent_id] => 0
            [attribute_id] => 8
            [children] => Array
                (
                )

        )

    [12] => Array
        (
            [page_id] => 12
            [page_parent_id] => 0
            [attribute_id] => 
            [children] => Array
                (
                    [49] => Array
                        (
                            [page_id] => 49
                            [page_parent_id] => 12
                            [attribute_id] => 
                            [children] => Array
                                (
                                    [50] => Array
                                        (
                                            [page_id] => 50
                                            [page_parent_id] => 49
                                            [attribute_id] => 32
                                            [children] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [13] => Array
        (
            [page_id] => 13
            [page_parent_id] => 0
            [attribute_id] => 9
            [children] => Array
                (
                )

        )

    [46] => Array
        (
            [page_id] => 46
            [page_parent_id] => 0
            [attribute_id] => 
            [children] => Array
                (
                    [52] => Array
                        (
                            [page_id] => 52
                            [page_parent_id] => 46
                            [attribute_id] => 34
                            [children] => Array
                                (
                                )

                        )

                    [53] => Array
                        (
                            [page_id] => 53
                            [page_parent_id] => 46
                            [attribute_id] => 
                            [children] => Array
                                (
                                    [54] => Array
                                        (
                                            [page_id] => 54
                                            [page_parent_id] => 53
                                            [attribute_id] => 35
                                            [children] => Array
                                                (
                                                )

                                        )
                                    [70] => Array
                                        (
                                            [page_id] => 70
                                            [page_parent_id] => 53
                                            [attribute_id] => 
                                            [children] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [56] => Array
                        (
                            [page_id] => 56
                            [page_parent_id] => 46
                            [attribute_id] => 
                            [children] => Array
                                (
                                )

                        )

                )

        )

)

到目前为止,我已经得到了这个,我可以回显出我想要取消设置的项目,但我不确定如何获取它,所以我实际上可以取消设置它。

function loop($a) {
    if(empty($a['children']))
    {
        if(empty($a['attribute_id']))
        {
            var_dump($a);
        }
    } else {
        foreach($a['children'] as $v) {
            loop($v);
        }
    }
}

foreach($pages as $p)
{
    loop($p);
}

【问题讨论】:

    标签: php arrays multidimensional-array unset


    【解决方案1】:

    类似这样的:

    function loop($a) {
        $newArray = array();
        foreach ($a as $k => $v) {
            if (isset($v['children']) && count($v['children']) > 0 ) {
                $v['children'] = loop($v['children']);
            }
    
            if ((isset($v['children']) && count($v['children']) > 0) || !empty($v['attribute_id'])) {
                $newArray[$k] = $v;
            }
        }
        return $newArray;
    }
    $newArray = loop($a);
    

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 2013-04-01
      • 1970-01-01
      • 2016-02-28
      相关资源
      最近更新 更多