Avant de lire mon pb ne vous effrayer de la taille du sujet. J'ai préféré expliquer en détail mon souci que donner un morceau de code.
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,'');
INSERT INTO famille VALUES (2,1);
INSERT INTO famille VALUES (3,2);
INSERT INTO famille VALUES (4,3);
INSERT INTO famille VALUES (5,4);
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 "<BR>idfils :".$idF." idFparent : ".$linepF[idpF]."<BR>";
$tab[$i] = $linepF[idpF];
//echo "count(tab) : ".count($tab)."<br>";
$i++;
}
}
for ($j=0;$j<count($tab);$j++)
{
if (isFeuille($tab[$j])>0)
{
//echo "tabF".$j." : ".$tab[$j]."<br>";
$tab1 = desc_arbo_famille($tab[$j]);
//echo "count(tab1) : ".count($tab)."<br>" ;
for ($k=0;$k<count($tab1);$k++)
{
//echo "tab".$k." : ".$tab1[$k]."<br>";
$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 "<br>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
Message édité par ibti25 le 21-11-2004 à 22:54:28