数组 转换为 树结构

// 初始数组
$arr = [
    ['id'=>1,'pid'=>0,'name'=>'a'],
    ['id'=>2,'pid'=>1,'name'=>'b'],
    ['id'=>3,'pid'=>1,'name'=>'c'],
    ['id'=>4,'pid'=>2,'name'=>'d'],
    ['id'=>5,'pid'=>0,'name'=>'e'],
];

// 目标数组
$mb = [
    [
        'id'=>1,
        'pid'=>0,
        'name'=>'a',
        'child'=>[
            [
                'id'=>2,
                'pid'=>1,
                'name'=>'b',
                'child'=>[
                    [
                        'id'=>4,
                        'pid'=>2,
                        'name'=>'d',
                    ]
                ]
            ],
            [
                'id'=>3,
                'pid'=>1,
                'name'=>'c',
            ]
        ]
    ],
    [
        'id'=>5,
        'pid'=>0,
        'name'=>'e',
    ]
];

function getTree($arr){
    // 得到 id => 索引 的映射
    $id_key = [];
    foreach ($arr as $k => $v) {
        $id_key[$v['id']] = $k;
    }

    for ($i=count($arr)-1;$i>0;--$i) {
        if ($arr[$i]['pid'] != 0) {
            // 将数组 插入 数组 头部

            if (isset($arr[$id_key[$arr[$i]['pid']]]['child'])) {
                for ($j=count($arr[$id_key[$arr[$i]['pid']]]['child']);$j>0;--$j) {
                    $arr[$id_key[$arr[$i]['pid']]]['child'][$j] = $arr[$id_key[$arr[$i]['pid']]]['child'][$j-1];
                }

                $arr[$id_key[$arr[$i]['pid']]]['child'][0] = $arr[$i];
            } else {
                $arr[$id_key[$arr[$i]['pid']]]['child'][] = $arr[$i];
            }

            unset($arr[$i]);
        }
    }

    return $arr;
}

echo json_encode(getTree($arr));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值