è una domanda scema ma proprio non riesco a venirne a capo :master:

ho un array costruito in modo simile a questo:

(livello) (nome elemento)
quindi
1 paolo
2 nicola
2 alessia
3 francesco
2 gianfranco
3 carmelo
4 ermenegilda

dovrei riuscire a rappresentare una struttura tipo

codice:
paolo
    nicola
    alessia
        francesco
    gianfranco
        carmelo
            ermenegilda
il tutto con degli ul, naturalmente...

io ho fatto questo:
Codice PHP:
<?php
$id 
1;
$rows $this->requestAction('/items/getmenuitems_ns/'$id);

$livello = -1;
$visible_path null;
$livello_vis null;

    foreach (
$rows as $row) {
        
$livello_str null;
           if (
$livello $row['livello']) {
             
$livello_str "\n<ul>[*]";
             
$livello_vis .= $row['visible'];
        }
        elseif (
$livello $row['livello']) {
            while (
$livello >= $row['livello']) // scendo i livelli della lista fino a chiuderla
            
{
                
$livello_str .= "\n[/list]";
                
$livello $livello 1;
                
$livello_vis substr($livello_vis0, -2);
            }
            
$livello_str .= "[*]";
            
$livello_vis .= $row['visible'];
        }
        elseif (
$livello == $row['livello'] and $livello != 0) {
            
$livello_str "\n[*]";
            
$livello_vis substr($livello_vis0, -1);
            
$livello_vis .= $row['visible'];
        }
        if (!
preg_match("/0/"$livello_vis)) {
            echo 
$livello_str;
            echo 
$livello;
            echo 
$html->link($row['nome'], "/items/view/".$row['id']);
        }
        
$livello $row['livello']; // imposto il vecchio livello per sapere come devo salire o scendere nell'albero
    
}
    echo 
"";

    while (
$livello > -1) { // scendo i livelli della lista fino a chiuderla
         
echo "[/list]\n";
         
$livello $livello 1;
    }
echo 
"[/list]";
?>
in parte funziona, ma non mi restituisce un codice html valido... dove sbaglio? :master:


edit: dimenticavo...
alcuni nodi possono essere invisibili, quindi non devono essere visualizzati e anche il ramo che parte da loro deve essere nascosto per fare questo ho costruito una semplice variabile $livello_vis, a cui aggiungo 1 se il livello è visibile e 0 se non lo è