如何使用PHP提取多维数组树的一部分

我有一棵巨大的动态生成的树。该树是根据每个元素的“ parent_id”属性从平面数组生成的。


例如,最终结果将如下所示:


Array

(

    [0] => Array

        (

            [id] => 70

            [name] => Top Corp

            [parent_id] => 0

            [children] => Array

                (

                    [0] => Array

                        (

                            [id] => 43

                            [name] => Department

                            [parent_id] => 70

                            [children] => Array

                                (

                                    [0] => Array

                                        (

                                            [id] => 45

                                            [name] => Building

                                            [parent_id] => 43

                                            [children] => Array

                                                (

                                                    [0] => Array

                                                        (

                                                            [id] => 75

                                                            [name] => Office

                                                            [parent_id] => 45

                                                        )


                                                )


                                        )

如何仅提取阵列树的一部分?我应该看什么功能或方法?


例如,我怎么说另一个子级别(可能深20-30个级别)现在位于顶部。


例如,的伪函数sliceTree(45)应产生以下结果,也就是从树开始id 45


[0] => Array

    (

        [id] => 45

        [name] => Building

        [parent_id] => 43

        [children] => Array

            (

                [0] => Array

                    (

                        [id] => 75

                        [name] => Office

                        [parent_id] => 45

                    )


            )


    )

没有办法知道树可以走多深,因此它的解决方案需要递归。


我曾尝试循环数组,寻找起始ID,但是我不确定在找到该点之后如何继续执行。

哪个有效,但仅适用于顶级元素。我该如何递归并解释儿童的多个层次?


千万里不及你
浏览 166回答 1
1回答

白衣染霜花

该sliceTree()函数基本上会查找某个确定id值并将其返回。像这样的东西:function sliceTree($tree, $branchId){    // check all branches    foreach ($tree as $branch) {        // have we found the correct branch?        if ($branch['id'] == $branchId) return $branch;        // check the children        if (isset($branch['children'])) {            $slice = sliceTree($branch['children'], $branchId);            if (isset($slice)) return $slice;        }     }    // nothing was found    return null;}如您所见,该例程是递归的。代码未经测试。我为混合的隐喻感到抱歉:分支机构和子级,但是您是从头开始的。此功能比我希望的要复杂一些,因为在您的示例中,children当没有子代时该键不存在。我通常希望它在那里并且该值是一个空数组。
打开App,查看更多内容
随时随地看视频慕课网APP