$result = [];
foreach ($data as $item) {
$obj = (object)[];
$obj->id = $item['id'];
$obj->parent_id = $item['parent_id'];
$obj->type = $item['type'];
$obj->level = $item['level'];
$obj->name = $item['name'];
$obj->url = $item['url'];
$obj->child = [];
$result[$obj->id] = $obj;
}
ksort($result);
foreach ($result as $item) {
if ($result[$item->parent_id] ?? false) {
$result[$item->parent_id]->child[] = $item;
}
}
$top_id = '0';
$dataset = [];
foreach ($result as $item) {
if ($item->parent_id == $top_id) {
$dataset[] = $item;
}
}
return $dataset;