PHP递归获取无限极分类

<?php

$users = [
    1 => ['id' => 1, 'name' => '及时雨(宋江)', 'leader_id' => 0],
    2 => ['id' => 2, 'name' => '玉麒麟(卢俊义)', 'leader_id' => 0],
    3 => ['id' => 3, 'name' => '智多星(吴用)', 'leader_id' => 1],
    4 => ['id' => 4, 'name' => '神机军师(朱武)', 'leader_id' => 2],
    5 => ['id' => 5, 'name' => '黑旋风(李逵)', 'leader_id' => 1],
    6 => ['id' => 6, 'name' => '浪子(燕青)', 'leader_id' => 2],
    7 => ['id' => 7, 'name' => '没面目(焦挺)', 'leader_id' => 5],
    8 => ['id' => 8, 'name' => '白花蛇(杨春)', 'leader_id' => 4],
    9 => ['id' => 9, 'name' => '跳涧虎(陈达)', 'leader_id' => 8],
];

$tree = $group_by_higher = [];
foreach ($users as $user) {
    if ($user['leader_id'] == 0) {
        $user['sublist'] = [];
        $tree[] = $user;
    } else {
        if (!isset($group_by_higher[$user['leader_id']])) {
            $group_by_higher[$user['leader_id']] = [];
        }
        $group_by_higher[$user['leader_id']][] = $user;
    }
}
foreach ($tree as $key => $item) {
    $tree[$key] = tree_recursion($users, $group_by_higher, $item['id']);
}

print_r($tree);

function tree_recursion($list, $group, $id)
{
    $item = $list[$id];
    $item['sublist'] = [];
    $result = $item;
    if (isset($group[$id])) {
        foreach ($group[$id] as $item) {
            $result['sublist'][] = tree_recursion($list, $group, $item['id']);
        }
    }
    return $result;
}

返回值:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 及时雨(宋江)
            [leader_id] => 0
            [sublist] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [name] => 智多星(吴用)
                            [leader_id] => 1
                            [sublist] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 5
                            [name] => 黑旋风(李逵)
                            [leader_id] => 1
                            [sublist] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 7
                                            [name] => 没面目(焦挺)
                                            [leader_id] => 5
                                            [sublist] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [name] => 玉麒麟(卢俊义)
            [leader_id] => 0
            [sublist] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [name] => 神机军师(朱武)
                            [leader_id] => 2
                            [sublist] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 8
                                            [name] => 白花蛇(杨春)
                                            [leader_id] => 4
                                            [sublist] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 9
                                                            [name] => 跳涧虎(陈达)
                                                            [leader_id] => 8
                                                            [sublist] => Array
                                                                (
                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 6
                            [name] => 浪子(燕青)
                            [leader_id] => 2
                            [sublist] => Array
                                (
                                )

                        )

                )

        )

)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值