IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récursivité, pas de retour [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut Récursivité, pas de retour
    Bonjour,

    Je souhaite faire un fil d'Ariane à l'aide d'une fonction récursive.
    Je ne sais pas ce que j'ai ce matin, mais ce machin qui semble "très simple", ne souhaite pas marcher.

    J'ai donc, une liste de page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    Array
    (
        [11] => Array
            (
                [id] => 11
                [nom] => rub_accueil
                [ordre] => 1
                [cible] => 11
                [menu] => 1
                [page] => 1
                [parent] => 0
                [template] => index.tpl
                [datecrea] => 1271677485
                [datefin] => 0
                [statut] => 1
                [traduction] => Array
                    (
                        [nom] => Accueil
                        [description] => 
                        [statut] => 1
                        [cmetaresume] => 
                        [cmetakeywords] => 
                        [cmetadescription] => 
                    )
     
                [lien] => categorie-11,Accueil
            )
     
        [12] => Array
            (
                [id] => 12
                [nom] => mon_compte
                [ordre] => 2
                [cible] => 12
                [menu] => 1
                [page] => 0
                [parent] => 0
                [template] => index.tpl
                [datecrea] => 1271773761
                [datefin] => 0
                [statut] => 1
                [traduction] => Array
                    (
                        [nom] => Mon Compte
                        [description] => 
                        [statut] => 1
                        [cmetaresume] => 
                        [cmetakeywords] => 
                        [cmetadescription] => 
                    )
     
                [lien] => categorie-12,Mon-Compte
            )
     
        [13] => Array
            (
                [id] => 13
                [nom] => connexion
                [ordre] => 1
                [cible] => 13
                [menu] => 1
                [page] => 1
                [parent] => 12
                [template] => log.tpl
                [datecrea] => 1271773761
                [datefin] => 0
                [statut] => 2
                [traduction] => Array
                    (
                        [nom] => Se connecter
                        [description] => 
                        [statut] => 1
                        [cmetaresume] => 
                        [cmetakeywords] => 
                        [cmetadescription] => 
                    )
     
                [lien] => categorie-13,Se-connecter
            )
     
    )
    Donc pour accéder à une catégorie : $MaVar[$CatId]['ce_que_je_cherche']
    Donc $MaVar[11]['id'] retourne bien 11.

    L'idée est donc en partant de la page la plus basse (catégorie 13), de remonter jusqu'au plus au parent : catégorie 11.

    Voici ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public function ListerCategorieParentes($aListeCategories,$iCategorieId) 
      {
        $aListe[] = $iCategorieId;
        $iParent = $aListeCategories[$iCategorieId]['parent'];
     
        if($iParent == 0)
        {
          return $aListe;
        }
        else
        {
          //réentrance
          $aListe[] = $iParent;
          $this->ListerCategorieParentes($aListeCategories,$iParent);
        }
     
      }
    J'ai testé les variables, elles sont bonnes.
    Donc, si je trace mon algo, normalement

    1- $aToutesCategories = le array que j'ai mis juste au dessus, $iCategorieId = la catégorie courante (ici 13)
    2- Je mets 13 dans mon tableau, j'ai $aListe[0] => 13
    3- Son parent est 12 et n'est donc pas égal à 0, je rentre dans le else
    4- Je mets le parent 12 dans ma liste, j'ai maintenant $aListe[0] =>13, $aListe[1] => 12
    5- Rappel de la fonction, je travaille avec 12, son parent est 0, j'arrête et je retourne $aListe

    Si je teste ma fonction sur les catégorie 11 ou 12, il me retourne bien seulement son propre id (normal, pas de parent) : array[0]=>11 (ou 12)

    Si je teste ma fonction sur la catégorie 13, il ne me retourne rien alors qu'il devrait retourner 13, puis 12.

    Help :s

  2. #2
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Bon, en fait, j'ai fais une mini modification et ça marche =)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /*
      *  Liste des catégories parentes
      */      
      public function ListerCategorieParentes($aListeCategories,$iCategorieId) 
      {
        $aListe[] = $iCategorieId;
        $iParent = $aListeCategories[$iCategorieId]['parent'];
     
        if($iParent != 0)
        {
          //réentrance
          $aListe[] = $iParent;
          $this->ListerCategorieParentes($aListeCategories,$iParent);
        }
     
        return $aListe;
      }
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Caster ou pas le retour de malloc
    Par corrector dans le forum C
    Réponses: 82
    Dernier message: 08/03/2008, 15h26
  2. [SSH2] Pas de retour avec ssh2_shell
    Par Leobaillard dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 10/02/2008, 02h42
  3. Echec de transfert par FTP mais pas de retour d'erreur
    Par kernigansnotdead dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/02/2008, 20h12
  4. Pas de retour des valeurs NULL
    Par titmael dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/12/2007, 14h41
  5. pas de retour si count = 0
    Par pittacos dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/08/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo