<?php

// ------------------------------------------------------------------------- //
// ARBRE RECURSIF                                                            //
// Permet de comprendre l'élaboration d'arborescences. Cette technique est,  //
// par exemple, utilisée pour la gestion des réponses dans les forums de     //
// discussion.                                                               //
// ------------------------------------------------------------------------- //
// Auteur: Christophe GORGERY                                                //
// Email:  webmaster@desperaweb.com                                          //
// Web:    http://desperaweb.com/                                            //
// ------------------------------------------------------------------------- //

/* 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=$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>";

       
/*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 (ammorce)
  //avec recherche depuis la racine.
  
recur($data,0,0);

?>