Vale, me funciona perfectamente, pero por si alguien lo necesita (ya que el código es tuyo) pongo el código modificado, lo he modifico que habían unos pequeños fallos y es que no se cerraba los </ul>.
Además he cambiado los echo por variables para imprimir por si se realiza desde una función, como en mi caso que programo en POO.
EDITADO
Muchas gracias a todos!!!
EDITOAl final no me ha servido ya que me daba fallos, tenía problemas con el ul y los li, así que me he fijado en la idea y lo he hecho desde cero, os paso el código por si os sirve:
$link = mysqli_connect('localhost','root','toor','test');
$result = mysqli_query($link,'SELECT ID, nombre, categoria_de FROM brida');
while($va = $re->fetch_array()){
if($va['padre']==0){
$menu[$va['ID']] = array($va['nombre']); } else {
$menu[$va['padre']]["sub"][]=$va['nombre'];
}
}
/* Crea el Menú */
$menuvar.='<ul>';
foreach($menu as $principal => $valor){
// Si tiene sub...
if(empty($valor["sub"])){ // Si no tiene sub
$menuvar.='<li>'.$valor[0].'</li>';
}else{
// Si tiene sub
$menuvar.='<li class="sub">'.$valor[0].'<ul>';
foreach($valor["sub"] as $sub => $subvalor){
$menuvar.='<li>'.$subvalor.'</li>';
}
$menuvar.='</ul>';
}
}
$menuvar.='</ul>';
return $menuvar;
Como se ve lo que cambio principalmente es poner el array del tipo $va[ID]["sub"], para así comprobar más fácilmente si tiene subs o no.
De todos modos, muchísimas gracias por todo, no se me habría ocurrido tu idea, supongo que es como la gente lo hace :-P
Saludos!