fonction recursive - organigramme

Eléphanteau du PHP | 24 Messages

12 déc. 2012, 17:23

Bonjour,
Je cherche a faire un organigramme simpliste.
J'ai une table user qui possede un champ manager representant le n+1.
voila plusieurs heures que je me prends la tete avec ca sans en voir le bout.
J'ai essayé de faire une fonction mais ca ne me rend pas ce que je veux.

Code : Tout sélectionner

function getchild($manager,$site) { $dbconn =& pnDBGetConn(true); $sqlarb ="SELECT pn_uid,pn_name,pn_uname,pn_user_jobfunction,pn_user_dpt FROM pn_users where pn_user_manager='$manager' order by pn_uname ASC"; $resultarb =& $dbconn->Execute($sqlarb); //global $orglist; while (!$resultarb->EOF) { list($pn_uid,$pn_name,$pn_uname,$pn_user_jobfunction,$pn_user_dpt) = $resultarb->fields; echo $pn_uname; $orglist.=$pn_uname; $resultarb->MoveNext(); //$orglist.=$pn_uname.'-'; getchild($pn_uname,$site); echo '-'; }
J'appeles cette fonction en passant le nom du pdg pour qu'il me ramene tous les enfants...
mais ca marche pas, ca me renvoi bien les noms des enfants, mais a la queuleuleu, et je perds toute notion de rattachement au parent...

Quelqu'un a deja fait ce genre de chose?
merci d'avance,
VooDoo

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 déc. 2012, 23:28

salut,


il faut que tu gère l'affichage, avec par exemple des tabulations pour avoir une démarque entre enfant et parent.

Perso j'utiliserais un paragraphe (balise p) avec une marge gauche pour le décaler du parent (qui a avoir aussi une discrète bordure à gauche pour marquer la chose).
=> donc ouverture du tag en première ligne de la fonction, fermeture avant la dernière }
Pour faire bien tu devrais d'abord compter le nombre d'enfant avant d'utiliser la récursivité.
Et limiter la récursivité afin de ne pas passer 30 minutes a afficher 200000 personnes ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

13 déc. 2012, 12:57

Bonjour moogli,
Merci pour ta réponse.
Bon j'ai bien avancé, j'ai trouvé une classe pour l'affichage.
J'arrive bien a constituer mon tableau, par contre j'ai du mal a creer une fonction recursive pour le parcours de mon tableau.
Des que je transforme ca en fonction ca marche plus :(
Peux etre tu peux m'aider sur ca.?

Code : Tout sélectionner

foreach($orglist as $cle => $element) { $htmlorg.='<li>'; $htmlorg.= $cle; $htmlorg.='<ul>'; foreach($element as $cle2 => $element2) { if(is_array($orglist[$element2])) { $htmlorg.='<li>'.$element2.'<ul>'; foreach($orglist[$element2] as $cle3 => $element3) { if(is_array($orglist[$element3])) { $htmlorg.='<li>'.$element3.'<ul>'; foreach($orglist[$element3] as $cle4 => $element4) { if(is_array($orglist[$element4])) { $htmlorg.='<li>'.$element4.'<ul>'; foreach($orglist[$element4] as $cle5 => $element5) { $htmlorg.='<li>'.$element5.'</li>'; } $htmlorg.='</ul>'; } else $htmlorg.='<li>'.$element4.'</li>'; } $htmlorg.='</ul>'; } else $htmlorg.='<li>'.$element3.'</li>'; } $htmlorg.='</ul>'; } else $htmlorg.='<li>'.$element2.'</li>'; } $htmlorg.='</ul></li>'; } $htmlorg.= '</ul>';

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 déc. 2012, 23:07

A quoi ressemble la fonction ?
Si tu passe en paramètre le tableau et que tu retourne $htmlorg ça doit aller.

@+
Il en faut peu pour être heureux ......