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 :

Fonction recursive pour un arbre


Sujet :

Langage PHP

  1. #1
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut Fonction recursive pour un arbre
    Bonjour,

    J'ai un base mysql qui contient des informations sur un arbre tout simple dont chaque branche a une valeur :
    id
    nom
    valeur
    id_parent

    Je cherche a recuperer un tableau comme suit :
    $tableau['nomniveau0'] = valeur;
    $tableau['nomniveau0-nomniveau1'] = valeur;
    $tableau['nomniveau0-nomniveau1-nomniveau2'] = valeur;
    etc.

    Mais je ne m'en sors pas du tout.
    Voici une de mes maigres tentatives pour essayer déjà d'afficher mon but :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function arbo($c01, $nom="", $parent=0) {
    	$sql = 'SELECT * FROM arbre WHERE id_parent = ' . $parent;
    	$result = $c01->query($sql);
    	while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
    	    $nom .= $row['nom']
                echo $nom;
               arbo($c01, $nom, $row['id']);
    	}
    }
    Y a t'il un moyen de faire ce que je veux ou est-ce que je suis complètement a côté de la plaque ?

    PS : j'ai par contre réussi a construire un tableau multidimensionnel reproduisant mon arbre.
    Mais cela ne m'arrange pas car je vais devoir creuser plus ou moins profond.
    Ce que je veux c'est pouvoir obtenir la valeur a partir de "niveau0-niveau1" par exemple.

    Merci pour votre aide.

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Si tu veux récupérer l'ensemble de ton arbre, le plus performant n'est pas nécessairement une fonction récursive avec à chaque fois requête sur la BDD... Tu risques d'y laisser des plumes.

    Peut-être qu'une requête ramenant toutes les données, suivie d'un traitement de tableau serait plus efficace ?

    Quelque chose comme :
    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
    $sql = 'SELECT id, nom, id_parent FROM arbre ORDER BY id';
    $result = $c01->query($sql);
    $allData = array();
    while ($row = $result->fetch(PDO::FETCH_ASSOC))
    {
        $allData[$row['id']] = array('nom' => $row['nom'], 'id_parent' => $row['id_parent']);
    }
     
    function key($index, $allData)
    {
        $key = $allData[$index]['nom'];
        if (!empty($allData[$index]['id_parent'])
        {
            $key = key($allData[$index]['id_parent'], $allData) . '-' . $key;
        }
        return $key;
    }
     
    $tableau = array();
    foreach($allData as $id=>$data)
    {
        $tableau[key($id, $allData)] = $data;
    }
    Mais pourquoi as tu besoin d'une présentation comme ça ?

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ah oui tiens j'avais pas pensé à faire comme ca.
    Je teste ça dés demain matin.
    Merci.

    Pour l'explication :
    Je vais recuperer des données plates "niveau0-niveau1-niveau2".
    et donc pour recuperer la valeur j'aurais juste à faire $tableau["niveau0-niveau1-niveau2"]

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Merci beaucoup Eusebe !


    C'est effectivement plus malin de tout récupérer et de trier ensuite.
    J'ai des problemes de logique avec les fonctions recursives, je crois que je me complique trop

    Par contre si quelqu'un voulait ré-adapter le code, key() est un nom déjà pris donc il faut renommer.

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

Discussions similaires

  1. fonction recursive pour la configuration du jeu futoshiki
    Par simpatico dans le forum Débuter
    Réponses: 7
    Dernier message: 12/02/2012, 15h07
  2. fonction acts_as_tree pour creer un arbre type organigramme
    Par jbarre dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 25/04/2007, 00h55
  3. Réponses: 6
    Dernier message: 12/04/2007, 21h30
  4. [Fonction](recursive) Problème pour dresser un arbre
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 21/11/2006, 14h35
  5. Fonctions récursives pour parcourir un arbre
    Par mikedavem dans le forum C
    Réponses: 4
    Dernier message: 05/06/2006, 13h00

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