求算法帝,如何把个一个带有父子级关系的数组,怎么把它们组成一个带等级排序的数组

发布于 2022-09-04 23:52:22 字数 1486 浏览 10 评论 0

$data = [
            ['id' => 1,'pid' => 0,'name' => '销售部'],
            ['id' => 2,'pid' => 0,'name' => '技术部'],
            ['id' => 3,'pid' => 2,'name' => '前端'],
            ['id' => 4,'pid' => 1,'name' => '电话销售'],
            ['id' => 5,'pid' => 2,'name' => '后端'],
            ['id' => 6,'pid' => 1,'name' => '电商销售'],
            ['id' => 7,'pid' => 5,'name' => 'php'],
            ['id' => 8,'pid' => 7,'name' => 'php子部门'],
            ['id' => 9,'pid' => 6,'name' => '淘宝销售'],
            ['id' => 10,'pid' => 4,'name' => '打电话员'],
    ];

实现成:

$data = [
            ['id' => 1,'pid' => 0,'name' => '销售部','level' => 0],
            ['id' => 4,'pid' => 1,'name' => '电话销售','level' => 1],
            ['id' => 10,'pid' => 4,'name' => '打电话员','level' =>2],
            ['id' => 6,'pid' => 1,'name' => '电商销售','level' => 2],
            ['id' => 9,'pid' => 6,'name' => '淘宝销售','level' =>1],

            ['id' => 2,'pid' => 0,'name' => '技术部','level' => 0],
            ['id' => 3,'pid' => 2,'name' => '前端','level' => 1],
            ['id' => 5,'pid' => 2,'name' => '后端','level' => 1],
            ['id' => 7,'pid' => 5,'name' => 'php','level' => 2],
            ['id' => 8,'pid' => 7,'name' => 'php子部门','level' => 3],
    ];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故人爱我别走 2022-09-11 23:52:22

首先获取pid 为key 对应的数组关系对

>  $a1 =   pid[0] = [[id, pid=0, name],[id, pid=0, name]]
>          pid[1] = [[id, pid=1, name],[id, pid=1, name]]

       

写个递归函数

function buildArr(& $a, $start, $level) {
    foreach($a[$start] as $pid => $aa) {
        $a[$start][$pid]['level'] = $level;
        if(isset($a[$pid])) {
            buildArr($a, $pid, $level + 1);
        }
    }
}

调用:buildArr($a1, 0, 0);

再然后 循环获取$a1 内容就好了

初吻给了烟 2022-09-11 23:52:22

首先你要明确这里面不能有循环引用,比如说 id=0 pid=1和id=1 pid=0不能同时存在,然后你就可以建立一个多叉树的森林结构,最后怎么遍历每棵树,前中后序,层次遍历什么的,很easy吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文