par
Invité » 13 août 2005, 11:28
rayon_niveau n'est pas nécessaire, il suffit de chercher si il a un père ou nom

Je pense que si malhaureusement et je m'explique...
J'ai actuellement cette fonction récursive qui me determine le chemin jusqu'à un objet :
Code : Tout sélectionner
// Le chemin
$id_niveau = $res['id_niveau'];
$chemin = array();
$c = 0;
$sql_chem = "SELECT niveaux_lg.niveau, niveaux.id_niveau, niveaux.niveau_parent
FROM niveaux
INNER JOIN niveaux_lg ON (niveaux.id_niveau = niveaux_lg.id_niveau)
WHERE niveaux.id_rayon = '$id_rayon'
AND niveaux_lg.id_lg = '$id_lg'";
$req_chem = mysql_query($sql_chem);
// En récupérant la requête je créé un tableau
while ($res_chem = mysql_fetch_array($req_chem)) {
$chemins[$c]['nom'] = $res_chem['niveau'];
$chemins[$c]['id'] = $res_chem['id_niveau'];
$chemins[$c]['parent'] = $res_chem['niveau_parent'];
$c++;
}
// Ma fonction récursive
function look ($id, $chemins) {
$i = 0;
global $chemin;
$chemin = array();
for ($c=sizeof($chemins)-1; $c >= 0; $c--) {
// echo 'Je regarde le niveau '.$chemins[$c]['nom'];
if ($chemins[$c]['id'] == $id) {
// echo ' : c\'est celui que je cherche !!<br>';
$chemin[$i]['id'] = $chemins[$c]['id'];
$chemin[$i]['nom'] = $chemins[$c]['nom'];
$id = $chemins[$c]['parent'];
$i++;
} else {
// echo '<br>';
}
}
if ($id == 0) {
// echo 'Fin de la recherche';
return $chemin;
} else {
look ($id, $chemins);
}
}
echo '<A HREF="rayon_'.$id_rayon.'_0.html">Rayon '.$res['rayon_lg'].'</A> <img src="img_interface/chevron.gif" width="13" height="7" /> ';
for ($f = sizeof(look ($id_niveau, $chemins))-1; $f >= 0; $f--) {
echo '<A HREF="rayon_'.$id_rayon.'_'.$chemin[$f]['id'].'.html">'.$chemin[$f]['nom'].'</A>';
if ($f != 0) {
echo ' <img src="img_interface/chevron.gif" width="13" height="7" /> ';
}
}
Donc pour ceux qui ont la flemme de décortiquer la fonction, je créé un tableau qui contient tous les chemins possibles, puis je parcoure le nombre de fois nécessaire ce tableau pour determiner le chemin de mon article. J'ai donc un tableau qui contient n entrées sachant que 0 est le niveau dans lequel se situe mon objet et 1 le niveau sup, etc... Je n'ai plus qu'à inverser mon tableau et voilà mon chemin...
Attention : $chemins contient tous les chemins possibles et $chemin LE bon chemin. Les deux sont des tableaux, bien sûr.
Je suis assez content de ma fonction je pense qu'elle est optimisée (relativement) mais le problème c'est que je voudrais par exemple determiner pour tel niveau tous les objets contenus dans les niveaux inférieurs. Dans mon exemple, si j'accède au niveau Pop, je veux tous les CD dont le niveau est Pop mais aussi BritPop...
Vous voyez mon problème ? :p
Quelqu'un peut m'aider ?
Merci !
[quote="smarties"]rayon_niveau n'est pas nécessaire, il suffit de chercher si il a un père ou nom :wink:[/quote]
Je pense que si malhaureusement et je m'explique...
J'ai actuellement cette fonction récursive qui me determine le chemin jusqu'à un objet :
[code]// Le chemin
$id_niveau = $res['id_niveau'];
$chemin = array();
$c = 0;
$sql_chem = "SELECT niveaux_lg.niveau, niveaux.id_niveau, niveaux.niveau_parent
FROM niveaux
INNER JOIN niveaux_lg ON (niveaux.id_niveau = niveaux_lg.id_niveau)
WHERE niveaux.id_rayon = '$id_rayon'
AND niveaux_lg.id_lg = '$id_lg'";
$req_chem = mysql_query($sql_chem);
// En récupérant la requête je créé un tableau
while ($res_chem = mysql_fetch_array($req_chem)) {
$chemins[$c]['nom'] = $res_chem['niveau'];
$chemins[$c]['id'] = $res_chem['id_niveau'];
$chemins[$c]['parent'] = $res_chem['niveau_parent'];
$c++;
}
// Ma fonction récursive
function look ($id, $chemins) {
$i = 0;
global $chemin;
$chemin = array();
for ($c=sizeof($chemins)-1; $c >= 0; $c--) {
// echo 'Je regarde le niveau '.$chemins[$c]['nom'];
if ($chemins[$c]['id'] == $id) {
// echo ' : c\'est celui que je cherche !!<br>';
$chemin[$i]['id'] = $chemins[$c]['id'];
$chemin[$i]['nom'] = $chemins[$c]['nom'];
$id = $chemins[$c]['parent'];
$i++;
} else {
// echo '<br>';
}
}
if ($id == 0) {
// echo 'Fin de la recherche';
return $chemin;
} else {
look ($id, $chemins);
}
}
echo '<A HREF="rayon_'.$id_rayon.'_0.html">Rayon '.$res['rayon_lg'].'</A> <img src="img_interface/chevron.gif" width="13" height="7" /> ';
for ($f = sizeof(look ($id_niveau, $chemins))-1; $f >= 0; $f--) {
echo '<A HREF="rayon_'.$id_rayon.'_'.$chemin[$f]['id'].'.html">'.$chemin[$f]['nom'].'</A>';
if ($f != 0) {
echo ' <img src="img_interface/chevron.gif" width="13" height="7" /> ';
}
}[/code]
Donc pour ceux qui ont la flemme de décortiquer la fonction, je créé un tableau qui contient tous les chemins possibles, puis je parcoure le nombre de fois nécessaire ce tableau pour determiner le chemin de mon article. J'ai donc un tableau qui contient n entrées sachant que 0 est le niveau dans lequel se situe mon objet et 1 le niveau sup, etc... Je n'ai plus qu'à inverser mon tableau et voilà mon chemin...
Attention : $chemins contient tous les chemins possibles et $chemin LE bon chemin. Les deux sont des tableaux, bien sûr.
Je suis assez content de ma fonction je pense qu'elle est optimisée (relativement) mais le problème c'est que je voudrais par exemple determiner pour tel niveau tous les objets contenus dans les niveaux inférieurs. Dans mon exemple, si j'accède au niveau Pop, je veux tous les CD dont le niveau est Pop mais aussi BritPop...
Vous voyez mon problème ? :p
Quelqu'un peut m'aider ?
Merci !