Pb avec ma fonction récursive

ibti25 Messages postés 10 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 21 novembre 2004 - 18 nov. 2004 à 19:58
ibti25 Messages postés 10 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 21 novembre 2004 - 21 nov. 2004 à 22:38
J'ai crée une fonction récursive qui me permet de récuperer tous les parents d'une famille donnée.
Pour cela, j'ai crée une table famille ou je stocke l'id de ma famille et l'idparent de celle-ci (s'il existe).
Ex de ma table :

CREATE TABLE famille (
idfamille int(11) NOT NULL auto_increment,
idfamparent int(11) default NULL,
PRIMARY KEY (idfamille)
) TYPE=MyISAM;

Le contenu de ma table :

INSERT INTO famille VALUES (1,'',NULL);
INSERT INTO famille VALUES (2,1,NULL);
INSERT INTO famille VALUES (3,2,NULL);
INSERT INTO famille VALUES (4,3,NULL);
INSERT INTO famille VALUES (5,4,NULL);

Voici la fonction que j'ai développé pour récuperer les parents des parents de la famille donnée :

// fonction qui recupere les parents d une famille
function desc_arbo_famille($idF){
$i =0;
$tab = array();

$query_pF = "SELECT idfamparent as idpF";$query_pF ." FROM famille WHERE idfamille $idF";
$respF = mysql_query($query_pF) or die(message_erreur("Echec de la requete sur la recuperation des parents d une famille","fonctions.php\n\n$query_pF\n\n".mysql_error()));

while ($linepF = mysql_fetch_array($respF)) {
if (!empty($linepF[idpF])){
//echo "
idfils :".$idF." idFparent : ".$linepF[idpF]."
";
$tab[$i] = $linepF[idpF];
//echo "count(tab) : ".count($tab)."
";
$i++;
}
}

for ($j=0;$j<count($tab);$j++)
{
if (isFeuille($tab[$j])>0)
{
//echo "tabF".$j." : ".$tab[$j]."
";
$tab1 = desc_arbo_famille($tab[$j]);
//echo "count(tab1) : ".count($tab)."
" ;
for ($k=0;$k<count($tab1);$k++)
{
//echo "tab".$k." : ".$tab1[$k]."
";
$tab[count($tab)] = $tab1[$k];
}
}
}
return $tab;
}

Et voici le code test de la fonction :

//appel de la fonction desc_arbo_famille avec mon idF = 4
$tabidF = desc_arbo_famille(4);

for($i=0;$i<count($tabidF);$i++){
echo "
tab_".$i." : ".$tabidF[$i];
}

Cette fonction marche bien jusqu'à un certain niveau de sous famille c'est dire si je rentre en paramètre à ma fonction l'idF = 3 tout se passe bien cad que je recupere ds mon tableau le parent de 3 qui est 2. Le parent de 2 qui est 1. Mais au dela de 3 niveaux, la fonction bug.

Par exemple, voici le contenu de mon tableau si je mets en paramètre de ma fonction l'idF = 4 :

//parent de 4
tab_0 : 3
//parent de 3
tab_1 : 2
//parent de 2
tab_2 : 1
//parent de 2
tab_3 : 1

Donc ici il me retourne 2 fois le parent de l'idF = 2.

Autre Exemple Pour idF = 5
tab_0 : 4
tab_1 : 3
tab_2 : 2
tab_3 : 1
tab_4 : 1
tab_5 : 2
tab_6 : 1
tab_7 : 1
tab_8 : 1

Y aurait il quelqu'un qui voit mon erreur ds ma fonction ? (Je pense que ça doit etre au niveau de mes count($tab)).

Merci

Ibti

1 réponse

ibti25 Messages postés 10 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 21 novembre 2004
21 nov. 2004 à 22:38
Je vois que personne ne voit mon bug !!!

Ou peut etre que vous êtes découragé de toute la lecture qu'il y a faire pour comprendre mon souci ????

Si vous avez besoin d'explications plus simples ou directes, dites le moi. Merci

Ibti
0
Rejoignez-nous