Por fin tuve tiempo para probar tu aporte. Al ser tan parecido a mi idea no me costo mucho implementarlo y probarlo. Si hace 3 meses hubiera tenido este nivel de abstracción para la función recursiva otro gallo cantaria
.
Para no ser menos aca coloco mi grano de arena en donde lo hago con mysqli orientado a objetos para los que se quieran actualizar y de paso lo coloco dentro de un div (por aquello de posteriormente manejar los estilos css). Igual aprovechando el esfuerzo se le puede colocar el id de la lista y por supuesto el enlace a donde se debe dirigir, ambos datos deberian estar dentro de la base de datos. Para no dañar tu idea original lo dejo comentado pero creo que se entiende claramente de que va la idea.
Código PHP:
require_once ("scripts/connect_to_mysqli.php");
function Menu ($id_padre=0,$mysqli){
$menu = '';
$sql = "SELECT * FROM menu WHERE id_padre = $id_padre";
$query = $mysqli->query($sql);
$cant = $query->num_rows;
//echo $cant;
if( $cant > 0 ){ $menu .= '<ul>'; }
while( $resultado = $query->fetch_assoc()){
$menu .= '<li>' . $resultado['menu_nombre'];
$menu .= menu( $resultado['id'] ,$mysqli) . '</li>';
}
if( $cant > 0 ){ $menu .= '</ul>'; }
return $menu;
}
$menudisplay = menu(0,$mysqli);
$menudisplay="<div id='menu'>$menudisplay</div>";