06-03-2007, 09:24 AM
Ca y est ! J'ai trouvé LA solution simple en PHP !
Code PHP :
<?php
function afficher_enfant($aarray, $ielement){
for($n = 1; $n <= count($aarray); $n++){
if($aarray[$n]['parent'] == $ielement){
echo '<ul>';
echo '<li>',$aarray[$n]['nom'],'</li>';
echo '<ul>';
echo afficher_enfant($aarray, $aarray[$n]['id']);
echo '</ul>';
echo '</ul>';
}
}
}
// Récupération et recopie du tableau (Peut faire l'objet d'une fonction pour plus de lisibilité)
$acopie = array();
$i = 0;
$sql2 = mysql_query("SELECT * FROM `lieux`") or die(mysql_error());
while($sql3 = mysql_fetch_assoc($sql2)){
$i++;
$acopie[$i] = array('id' => $sql3['id'], 'nom' => $sql3['nom'], 'parent' => $sql3['parent']);
// Ajout d'éléments au tableau
}
//echo '<pre>',print_r($acopie),'</pre>';
afficher_enfant($acopie, 0);
Voila ^^. Avec ça, tu peux avoir 10000 éléments enfants ça marche (en voici la preuve : Exemple 2) !
En regardant la source on peut tout de même voir qu'à chaque nouvel élément <li></li> est placé dans un <ul></ul>, ce n'est donc pas 100% sémantique, mais ça peut l'être en retravaillant un peu (ou en jouant des CSS). De plus l'utilisation de listes permet ici de mettre en évidence les liens de parenté.
Sephi-Chan