Php

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.
A voir également:

3 réponses

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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 :
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
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
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 :
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;
        }
    }
}
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bien sûr, suis-je bête ^^'
0
maure
 
Ca a marché,

Merci beaucoup pour vos réponses.
0