Cet article souhaite vous montrer comment realiser une structure arborescente en PHP à partir des tableaux PHP ( hashtable ). Effectivement dans php il n'y a pas en natif de structure arborescente. Il est possible de la créer via des objects ( classes PHP ). C'est peut etre la bonne methode bien rigoureuse. Cependant je souhaiterais vous entretenir d'une autre méthode plus souple moins rigpoureuse et facilement implemetable. Cette technique n'est pas specifique a php mais peut etre aussi appliquer à Tcl/Tk.
L'idée vient du fait que l'on a des hashtables dans lesquelle on peut inserer toutes sortes d'object dont des hashtables.
Il est impérative que l'on puisse faire un introspection sur le type de l'object contenu dans la hashtable, ceci est possible avec le langage PHP grace a la fonction is_array ( attention elle n'est presente que dans les version supérieur ouéegal a PHP 3.0.16 et PHP4 ).
Effectivement on peut considérer un arbre tel une liste de noeud contenant soit une feuille ou une autre liste de noeud. Bon, c'est la ou cette technique est interressante car on ne se limite pas a un type d'arbre ( binaire ... ). De plus on peut facilement faire une structure etant une collection d'arbre , c'est a dire un arbre avec plusieur racine.
Il est evident que je ne cherche pas ici a appliquer a ces arbres structurer ainsi les algorythmes classique sur les arbres ( algo sur arbre binaire par exemple : Binary Search Tree ou DSW Algorithm ).
Je fais un peu de bla bla histoire ne peut vous forger de suite ma petit routine dont je suis content beatement et certaiment betement content tel l'informaticien atteingnant un orgasme spirituel lorsqu'il a réussi à sur bouger un point sur son écran. Remarquez que pendant des années des gens appele demomarker etaient dans cette phase lorsqu'ils voyaient bouger des boules sur un tube cathodique. C'est Freudien non ? :).
Nous allons premierement créer les données arborescentes en créant un tableau pouvant contenir des tableaux et des feuilles ( chaine de caracteres ).
$arraytree=array("Racine"=>array("Branche 1"=>array("Sous Branche1"=>"Feuille 1","Sous Branche 2"=>"Feuille 2"),"Branche2"=>"Feuille 3"));
La fonction permettant d'afficher :
function addtree ($father, $array) { echo "<ul>\n"; while ( list ($tag,$value) = each ($array) ) { if ( is_array($value)==TRUE) { echo "<li>$father -> $tag noeud<br>\n"; addtree($tag,$value); } else { echo "<li>$father -> $tag : $value<br>\n"; } } echo "</ul>\n"; }Voici le resultat:
$arraytree=array("Home"=>"toto","News"=>array("This Day"=>"titi","This Week"=>"tata"),"Link"=>"tutu");Representant l'arborescense suivante:
Home -> toto News -\ | |_ This Day -> titi |_ This Week -> tata Link -> tutuHe bien ca le fait:
$arraytree=array("Home de Mmmm"=>"http://mmmm.free.fr","Autres liens"=>array("Mmmm"=>"http://mmmm.free.fr","Apodéline"=>"http://apodeline.free.fr"),"Cette page"=>"#");En modifiant un peu addtree:
echo "<li>$father -> $tag : $value<br>\n";Devenant
echo "<li>$father -> <a href =\"$value\">$tag </a><br>\n";On obtient:
C'est bien joli tout cela, mais les listes c'est plutot moche.
Pour rendre le bidulle plus joli, nous allons voir comment utiliser la librairie javascript permettant de realiser un arbre.
Nous avons utiliser le code javascript present dans le lien suivant.
Utilisation d'un object graphique arbre en javascript J'ai peux apprecier la facilite de la librarie de smith ce qui m'a permis de l'integrer a un projet en PHP.
L'utilisation de la generation du javascript en php n'est pas facile car il faut (ou il vaut mieux) ecrire le code javascript dans le HEADER du document HTML.
La difficulté avec javascript est de générer des scriptes dynamiques en fonction par exemple du contenu d'une base de donnée. Cependant pour certaines personnes dont moi , je preferre manipuler du PHP plutot que du javascript.
$arraytree=array("Home de Mmmm"=>"http://mmmm.free.fr","Autresliens"=>array("Mmmm"=>"http://mmmm.free.fr","Apodéline"=>"http://apodeline.free.fr"),"Cette page"=>"#");et le code source de la page.