cs_foxmaster
Messages postés38Date d'inscriptionmercredi 9 février 2005StatutMembreDernière intervention23 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és9Date d'inscriptionvendredi 12 août 2005StatutMembreDernière intervention22 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és30Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention24 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
crazygogo
Messages postés135Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention17 avril 2009 15 janv. 2009 à 09:45
Notice: Undefined index: choix_elements
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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és2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 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és38Date d'inscriptionmercredi 9 février 2005StatutMembreDernière intervention23 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és1423Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention29 décembre 20124 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és1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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és38Date d'inscriptionmercredi 9 février 2005StatutMembreDernière intervention23 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.
Teclis01
Messages postés1423Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention29 décembre 20124 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?
22 juil. 2010 à 22:19
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 ;)
22 juil. 2010 à 18:47
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
24 févr. 2010 à 01:42
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;
24 févr. 2010 à 01:31
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>";
15 janv. 2009 à 09:45
15 janv. 2009 à 00:51
if (isset ($value['id'], $value['nom'], $value['niveau'], $value['dependance'])) {
// ..
}
et remplace tous les " (double quotes) par des ' (simple quotes), c'est plus performant.
14 janv. 2009 à 19:06
"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.
14 janv. 2009 à 18:35
si vous soyez autre chose...?
j'ai intégré un exemple.
14 janv. 2009 à 15:06
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)
14 janv. 2009 à 14:29
14 janv. 2009 à 14:00
(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
14 janv. 2009 à 09:35
_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!