为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
千万里不及你 2021-04-27 13:10:34
我有一棵巨大的动态生成的树。该树是根据每个元素的“ 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,但是我不确定在找到该点之后如何继续执行。哪个有效,但仅适用于顶级元素。我该如何递归并解释儿童的多个层次?
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

该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当没有子代时该键不存在。我通常希望它在那里并且该值是一个空数组。


查看完整回答
反对 回复 2021-05-28
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信