Php
maure
-
maure -
maure -
Bonjour,
J'ai un petit pb, je développe en php5.
Mon probleme c'est que j'ai une fonction getNoeud qui parcoure un arbre pour chercher un Noued dont l'identifiant est passé en parametre, la recherche se fait recursivement, le problème est que le resultat est toujours vide !!!
voici le code de ma fonction :
public function getNoeud($idArbre){
if ($this->_id == $idArbre){
return $this;
} else {
foreach ($this->_arbresChildren as $arbre){
if ($arbre->_id == $idArbre){
return $arbre;
} else {
$arbre->getNoeud($idArbre);
}
}
}
}
Est ce que vous y voyez une erreure de programmation?
d'avance merci.
J'ai un petit pb, je développe en php5.
Mon probleme c'est que j'ai une fonction getNoeud qui parcoure un arbre pour chercher un Noued dont l'identifiant est passé en parametre, la recherche se fait recursivement, le problème est que le resultat est toujours vide !!!
voici le code de ma fonction :
public function getNoeud($idArbre){
if ($this->_id == $idArbre){
return $this;
} else {
foreach ($this->_arbresChildren as $arbre){
if ($arbre->_id == $idArbre){
return $arbre;
} else {
$arbre->getNoeud($idArbre);
}
}
}
}
Est ce que vous y voyez une erreure de programmation?
d'avance merci.
A voir également:
- Php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
3 réponses
Bonjour,
Il y a en effet une petite erreur de programmation.
Reprenons ton algorithme : si je suis le noeud recherché, alors je me renvoie. Si je ne suis pas le noeud recherché, alors... Oui, alors, quoi ? Ben alors rien, je recherche si un de mes fils est le noeud recherché, mais je ne renvoie pas de résultat !
Par ailleurs, tu testes deux fois la même chose, tu peux supprimer un de tes tests.
Voilà ce que devient ta fonction :
Xavier
Il y a en effet une petite erreur de programmation.
Reprenons ton algorithme : si je suis le noeud recherché, alors je me renvoie. Si je ne suis pas le noeud recherché, alors... Oui, alors, quoi ? Ben alors rien, je recherche si un de mes fils est le noeud recherché, mais je ne renvoie pas de résultat !
Par ailleurs, tu testes deux fois la même chose, tu peux supprimer un de tes tests.
Voilà ce que devient ta fonction :
public function getNoeud($idArbre) { if ($this->_id == $idArbre) { return $this; } else { foreach ($this->_arbresChildren as $arbre) { return $arbre->getNoeud($idArbre); } } }Bon courage pour la suite :)
Xavier
En effet, mais il y a encore juste un petit oubli. Si on retourne directe le résultat dans la boucle des fils, si ce résultat est nul (c'est à dire que le noeud que l'on cherche n'est pas contenu dans le sous arbre fil) alors la recherche s'arrete là et renvoi nul au lieu de faire la meme chose dans les autres sous arbres fils.
Ainsi il faut transformer comme suit :
Ainsi il faut transformer comme suit :
public function getNoeud($idArbre) { if ($this->_id == $idArbre) { return $this; } else { $retour_fil = null; foreach ($this->_arbresChildren as $arbre) { $retour_fil = $arbre->getNoeud($idArbre); if ( $retour != null ) return $retour_fil; } } }