// 高效率递归方法
public static function buildTree(array $menus)
{
$pids = [];
foreach ($menus as $menu) {
$pids = arrayAppend($pids, $menu['parent_id'], $menu['id']);
}
return self::getChildren($menus, $pids, 0);
}
function arrayAppend(array $array, $key, $value)
{
if (! isset($array[$key])) {
$array[$key] = [];
}
$array[$key][] = $value;
return $array;
}
public static function getChildren(array $menus, array $pids, int $pid = 0)
{
$return = [];
foreach (($pids[$pid] ?? []) as $menuId) {
$return[] = [
'id' => $menus[$menuId]['id'],
'name' => $menus[$menuId]['name'],
'url' => $menus[$menuId]['url'],
'children' => self::getChildren($menus, $pids, $menuId),
];
}
return $return;
}