// 初始数组
$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));