Arborescence récursive

Contenu du snippet

Ce code n'est pas de moi, mais puisqu'il me sert énormément et que je n'ai pas trouvé de code de ce type sur phpcs, je le livre. Il sert à mettre en forme à partir de données tabulaires (contenues dans un tableau) une arborescence. Le tableau ne nécéssite que deux champs obligatoires : l'ID de l'objet, et l'ID de l'objet parent. Le code génère une arborescence illimitée multiniveaux. On peut modifier le code assez facilement pour y intégrer les résultats d'une base mysql par exemple... Le code est commenté.

Source / Exemple :


<?php
/*cette fonction gère le décallage des éléments
     suivant leur position dans l'arborescence

  • /
function espace($rang) { $ch= ''; for ($x=0;$x<$rang;$x++) { $ch.= '&nbsp;&nbsp;&nbsp;&nbsp;'; } return $ch; } /*fonction récursive d'affichage de l'arbre $tab :tableau des éléments $pere :index de l'élément courrant $rang :décallage de l'élément
  • /
function recur($tab,$pere,$rang) { //ballayage du tableau for ($x=0;$x<count($tab);$x++) { //si un élément a pour père : $pere if ($tab[$x][1]==$pere) { //on l'affiche avec le décallage courrant echo espace($rang),$tab[$x][2],'<BR />',"\n"; /*et on recherche ses fils en rappelant la fonction recur() (+ incrémentation du décallage)*/ recur($tab,$tab[$x][0],$rang+1); } } } /*-------------------- MAIN ----------------------- tableau des éléments de l'arbre: c'est un tableau à 2 dimensions. Une ligne représente un élément : data[$x] chaque ligne est décomposée en 3 données: - l'index de l'élément - l'index de l'élément parent - la chaîne à afficher ie: data[]= array (index, index parent, chaine )
  • /
//il faut d'abord déclarer un élément racine de l'arbre $data[] = array(0,-1,'racine'); //puis tous les éléments enfants $data[] = array(1,0,'BOISSONS'); $data[] = array(2,0,'ALIMENTS'); $data[] = array(3,1,'Alcool'); $data[] = array(4,1,'Sans alcool'); $data[] = array(5,2,'Legumes'); $data[] = array(6,5,'salades'); $data[] = array(7,6,'batavia'); $data[] = array(8,6,'laitue'); $data[] = array(9,5,'carottes'); $data[] = array(10,5,'tomates'); $data[] = array(11,2,'viandes'); $data[] = array(12,11,'Jambon'); $data[] = array(13,11,'steack haché'); $data[] = array(14,0,'DIVERS'); $data[] = array(15,14,'Dentifrice'); $data[] = array(16,14,'sacs poubelles'); $data[] = array(17,14,'lessive'); $data[] = array(18,3,'biere'); $data[] = array(19,3,'porto'); $data[] = array(20,4,'eau'); //appelle de la fonction récursive (amorce) //avec recherche depuis la racine. recur($data,0,0); ?>

Conclusion :


Je trouve ce code fantastique ! Il est très simple, et peut générer une arborescence avec des sous niveaux infini, il n'a aucune limite et est adaptable à l'infini !
Ce script est de Christophe GORGERY, il a été trouvé sur son site http://desperaweb.com.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_titatou)