HIÉRARCHISATION D'UN TABLEAU PAR FONCTION RÉCURSIVE

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 14 janv. 2009 à 09:35
cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013 - 22 juil. 2010 à 22:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48970-hierarchisation-d-un-tableau-par-fonction-recursive

cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013
22 juil. 2010 à 22:19
Bonjour,

j'avoue ne pas avoir essayé de pousser la récursivité à un si grand niveau, ta base est-elle bien optimisée?

la requete faisant un appel de toutes les données de la base, peut etre aussi modifier cette requete pour qu'elle ne sélectionne que les champs nécessaires.

bien que mon exemple montre tous les sous éléments , je ne pense pas que l'on ai à montrer tout d'un coup.

je n'ai pas vraiment d'idée et a vrai dire cela fait longtemps que je n'ai pas codé.. mais si tu as une piste, un indice ou des idées, expose les ;)
Anardil Messages postés 9 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 22 juillet 2010
22 juil. 2010 à 18:47
Salut,

J'ai testé ta fonction sur mes catégories. 70 catégories, 3 niveaux de catégories.
Ta fonction est chronophage. J'ai eu un bon Memory Limit.
Il faudrait la revoir un peu :p
josselinbonnin Messages postés 30 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 24 février 2010
24 févr. 2010 à 01:42
re salut

et puis juste un détail mais éviter de mettre des echo partout
juste un a la fin sa suffit

$newtab = recurs($tb,0,0,'');
$select.="<select name="choix_elements">\n";
$select.="<option value="0">Sélectionner</option>\n";

foreach($newtab as $key => $valnewtab) {

$nom=$valnewtab['nom'];
if($key==0){$lvl0=$valnewtab['niveau'];}
$style=10*$valnewtab['niveau'];

$select .="<option style="padding-left:".$style."px;" value="".$valnewtab['id'].""";

if($_GET['choix_elements']==$valnewtab['id']){echo "selected";}

$select.=">".$nom."</option>\n";

}
$select.="</select>";

echo $select;
josselinbonnin Messages postés 30 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 24 février 2010
24 févr. 2010 à 01:31
salut

moi perso jai pas les

donc jai fait :

$newtab = recurs($tb,0,0,'');
echo "
<select name="choix_elements">
<option value="0">Sélectionner</option>\n";

foreach($newtab as $key => $valnewtab) {

$nom=$valnewtab['nom'];
if($key==0){$lvl0=$valnewtab['niveau'];}
$style=10*$valnewtab['niveau'];

echo "<option style="padding-left:".$style."px;" value="".$valnewtab['id'].""";

if($_GET['choix_elements']==$valnewtab['id']){echo "selected";}

echo">".$nom."</option>\n";

}
echo "</select>";
crazygogo Messages postés 135 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 17 avril 2009
15 janv. 2009 à 09:45
Notice: Undefined index: choix_elements
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
15 janv. 2009 à 00:51
La beauté de isset est que tu peux lui passer n paramètres à tester, dans ton cas :

if (isset ($value['id'], $value['nom'], $value['niveau'], $value['dependance'])) {
// ..
}

et remplace tous les " (double quotes) par des ' (simple quotes), c'est plus performant.
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
14 janv. 2009 à 19:06
Le titre de la source ne correspond pas au contenu, il devrait donner une idée de ce qu'on va trouver.

"Hiérarchisation d'un tableau par une application de la récursivité", ou quelque chose comme ça, conviendrai mieux il me semble.

Sinon bonne idée, ça doit pouvoir être utile.
cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013
14 janv. 2009 à 18:35
j'ai de nouveau apporté les modifs de codefalse et teclis01
si vous soyez autre chose...?
j'ai intégré un exemple.
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 janv. 2009 à 15:06
pour ton global, suffit de lui passer en param d'entrée à ta fonction récursive.
function recurs($tb,$parent,$appelid,$newtab=array())
et tu le retournes.
ensuite tu changes pas sont type en cours de route (Ligne 1 c'est un string vide puis devient un array)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
14 janv. 2009 à 14:29
et à ta place je testerai aussi si le tableau donné respecte bien la demande (si les diverses clées (id, nom, niveau, dependance) sont présentent avec un petit isset :)
cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013
14 janv. 2009 à 14:00
Merci pour ces commentaires j'ai appliqué certaines des modifs données
(if(!empty) et les parent inutiles,
concernant le global, je ne vois pas d'autre solution pour récupérer de nouveau sous forme de tableau filtrés les données.

concernant l'exemple
il y en a un ici
http://foxmaster.info/recursivite/recursivite.php
comme précisé dans la partie supérieure
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 janv. 2009 à 09:35
_un foreach sans if(!empty($aArray)) pas très élégant...
_un global ... encore moins élégant...
_Pas d'exemple d'utilisation
_$parent=="" or $parent==0 très moche ^_^ Soit il a un id>0 auquel cas il a un parent soit non pq testes tu la chaine vide?

A vos claviers!
Rejoignez-nous