JeuWeb - Crée ton jeu par navigateur
optimisation de mon futur tutorial - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : optimisation de mon futur tutorial (/showthread.php?tid=837)

Pages : 1 2 3


RE: optimisation de mon futur tutorial - ddlink - 05-03-2007

je up ce sujet Wink


RE: optimisation de mon futur tutorial - Sephi-Chan - 06-03-2007

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) !

[Image: exemplexz4.gif]

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


RE: optimisation de mon futur tutorial - Roworll - 06-03-2007

Joli Smile

Si je peux me permettre, juste une petite optimisation de traitement :
Code PHP :
<?php 
//Petite optimisation sur la gestion des <ul> et <li>
function afficher_enfant($aarray,$i){
echo
'<ul>';
foreach(
$aarray[$i] as $Key=>$Val){
echo
'<li>',$aarray[$i][$Key],'</li>';
if(isset(
$aarray[$Key])) afficher_enfant($aarray,$Key);
}
echo
'</ul>';
}

// Le tableau est construit sous la forme Tableau[parent][id] = valeur
//Cela évite un parcours complet inutile dans la fonction afficher_enfant
$acopie = array();
while(
$sql3 = mysql_fetch_assoc($rs)){
$acopie[$sql3['id_parent']][$sql3['id']] = $sql3['nom'];
}

afficher_enfant($acopie,0);



RE: optimisation de mon futur tutorial - Sephi-Chan - 06-03-2007

Bien vu. Quel fin optimisateur tu fais Roworll Wink

Ce qui m'embête un peu dans ce script, c'est qu'il n'est pas très flexible (il faut connaître d'avance l'array pour le recopier), je suis persuadé qu'il y à un moyen de faire que ça duplique tous les arrays (en gardant les mêmes noms pour les clés associatives). Je pense à list() mais il y a peut-être d'autres moyens. A voir.

En tout cas, si ce défaut peut être corrigé, ce serait un outil très utile pour éviter la multiplication de requête et des jointures.


Sephi-Chan, tiens, un +1.