Function recursive pour arborescence

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Function recursive pour arborescence

Re: Function recursive pour arborescence

par stealth35 » 10 janv. 2012, 12:03

Re: Function recursive pour arborescence

par teebo » 10 janv. 2012, 00:43

Bonjour,

Je me casse la tête depuis un moment, j'aimerais également créer une fonction récursive mais qui permet de récupérer tous les dossiers et sous-dossiers (et sous-sous-dossiers...) d'un repertoire...

Par exemple :

Code : Tout sélectionner

Rep_niv1_A/Rep_niv2_A/ /Rep_niv2_B/ /Rep_niv2_C/Rep_niv3_A/ Rep_niv1_B/Rep_niv2_A/Rep_niv3_A/ /Rep_niv3_B/ Devrait retourner $tree = Array ( [0] => Array ( [name] => Rep_niv1_A [folders] => Array ( [0] => Array ( [name] => Rep_niv2_A [folders] => Array ( ) ) [1] => Array ( [name] => Rep_niv2_B [folders] => Array ( ) ) [2] => Array ( [name] => Rep_niv2_C [folders] => Array ( [0] => Array ( [name] => Rep_niv3_A [folders] => Array ( ) ) ) ) [1] => Array ( [name] => Rep_niv1_B [folders] => Array (
Bref et ainsi de suite....

Merci de votre aide!!!

Re: Function recursive pour arborescence

par Ryle » 27 mai 2011, 16:17

Tu peux optimiser et simplifier un peu ta fonction en virant la partie $niveau, qui au final n'est pas du tout utilisée dans ton traitement :)

Re: Function recursive pour arborescence

par Toons43 » 27 mai 2011, 11:07

Merci beaucoup Ryle, ta fonction m'a permis de comprendre où était mon erreur, je partage donc ma fonction si ça peut aider

Code : Tout sélectionner

/** * Fonction récursive pour arborescence * * @param nombre $parent pour les catégories ayant cet id_parent * @param nombre $niveau, uniquement pour que la fonction sache ou elle en est * @param array $array spécifie le tableau à passer dans la fonction * * @return array multidimensionnel sous forme d'arborescence */ function recurse_tree($parent, $niveau, $array) { $result = array(); foreach ($array as $noeud) { if ($parent == $noeud['parent_id']) { $result[] = array( 'id' => $noeud['page_id'], 'name' => $noeud['page_nom'], 'children' => recurse_tree($noeud['page_id'], ($niveau + 1), $array) ); } } return $result; }
Bonne journée
A bientôt

Re: Function recursive pour arborescence

par Ryle » 27 mai 2011, 00:21

C'est fait un peu rapidement, mais ta fonction devrait ressembler à quelque chose de ce genre là :
function maFonctionRecursive($parent=0) {
   $tableau = array();
   $sql = " SELECT ... WHERE parent_id = ". $parent;
   ...
   while(...) { // pour chaque page
      $page_id = ... ; // récup de l'id de la page

      $tableau[] = array( // récup des paramètres et appel récursif
         'id' => $page_id
         , 'name' => $page_nom
         , 'children' => maFonctionRecursive($page_id));
   }
   return $tableau; 
}   
Je pense qu'il y a de meilleures solutions pour éviter un nombre inconnu d'exécution de requête, mais ça te donne au moins une piste :)

Function recursive pour arborescence

par Toons43 » 26 mai 2011, 15:05

Bonjour à tous,
Je viens vous demander un peu d'aide car je suis bloqué sur une fonction que je n'arrive pas à créer. J'ai une table dans laquelle mes pages sont stockées et chaque page peut avoir un parent_id.
Je souhaite faire une fonction pour récupérer dans un tableau toute mon arborescence

J'ai une classe Page avec une methode GetList qui me retourne un objet avec toute mes pages sous la forme :

Code : Tout sélectionner

Array ( [0] => Page Object ( [page_id] => 1 [page_nom] => NOM1 [parent_id] => 0 ) [1] => Page Object ( [page_id] => 2 [page_nom] => NOM2 [parent_id] => 0 ) [2] => Page Object ( [page_id] => 3 [page_nom] => NOM3 [parent_id] => 2 ) [3] => Page Object ( [page_id] => 4 [page_nom] => NOM4 [parent_id] => 0 ) [4] => Page Object ( [page_id] => 5 [page_nom] => NOM5 [parent_id] => 0 ) [5] => Page Object ( [page_id] => 6 [page_nom] => NOM6 [parent_id] => 1 ) [6] => Page Object ( [page_id] => 7 [page_nom] => NOM7 [parent_id] => 2 ) [7] => Page Object ( [page_id] => 9 [page_nom] => NOM9 [parent_id] => 1 ) [8] => Page Object ( [page_id] => 10 [page_nom] => NOM10 [parent_id] => 2 ) )
Et je voudrais donc une fonction pour retourner un tableau multidimensionnel de cette forme :

Code : Tout sélectionner

Array ( [0] => Array ( [id] => 1 [name] => NOM1 [children] => Array ( [0] => Array ( [id] => 6 [name] => NOM6 [children] => Array ( ) ) [1] => Array ( [id] => 9 [name] => NOM9 [children] => Array ( ) ) ) ) [1] => Array ( [id] => 2 [name] => NOM2 [children] => Array ( [0] => Array ( [id] => 3 [name] => NOM3 [children] => Array ( ) ) [1] => Array ( [id] => 7 [name] => NOM7 [children] => Array ( ) ) [2] => Array ( [id] => 10 [name] => NOM10 [children] => Array ( ) ) ) ) [2] => Array ( [id] => 4 [name] => NOM4 [children] => Array ( ) ) [3] => Array ( [id] => 5 [name] => NOM5 [children] => Array ( ) ) )
Comment faire une fonction récursive pour obtenir ce dont j'ai besoin.

D'avance merci à tous.