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 :

Tableaux imbriqués à 4 niveaux


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Tableaux imbriqués à 4 niveaux
    Bonjour à tous,

    Tout d'abord, j'ai cherché une réponse, mais n'ai rien trouvé de satisfaisant. Pardonnez-moi si j'ai loupé la réponse ; et merci d'avance de me l'indiquer.

    Je dois, pour construire le menu d'un site, utiliser des tableaux imbriqués à 4 niveaux. Malheureusement, l'utilisation d'une BDD est exclue, pour garder le site léger et simple (ça aurait été trop facile...).

    J'ai donc un menu qui se présente ainsi :

    • inprocess
      • architectes
      • ateliers
    • projets
      • par programme
        • musées
          • la tannerie
          • maison des arts
        • bibliothèques
        • hôtels
      • par visuel
      • par chronologie


    et ainsi de suite...

    J'ai donc créé un tableau à 4 niveaux pour contenir l'ensemble de l'arborescence, et naviguer dedans facilement. Exemple :

    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
     
    $menu = Array (
        "inprocess" => Array (
            "archi" => Array (
                "part" => Array (
                    "mathias" =>  "mathias",
                    "corinne" => "mathias"
                ),
                "ass" => "ass",
                "coll" => "coll"
            ),
            "atel" => "atel"
        ), 
        "projets" => Array (
            "prog" => Array (
                "musees" => Array (
                    "tannerie" => "tannerie",
                    "maisondesarts"  => "maisondesarts"
                ),
                "biblioth"  => Array (
                    "prague" => "prague"
                ),
                "hotels"  => Array (
                    "chanchan" => "chanchan",
                    "giterural" => "giterural"
                ),
    [...]
    Tout fonctionne bien jusque là, sauf que je ne peux pas récupérer la donnée "nom" qui est différente de la forme courte utilisée pour la barre d'adresse (gérée avec une redirection d'url). Quand je demande à ce qu'il m'affiche $menu['inprocess']['archi']['part'], j'ai Array, au lieu de inprocess > architectes > partenaires comme je le voudrais.

    Pour reformuler : avec ce type de tableau, j'ai l'arborescence comme je la veux, mais j'aimerais pouvoir récupérer le nom plus le contenu. Jusque là, je n'ai réussi à avoir que le contenu, ou que le nom. Et je ne sais pas comment construire le tableau pour tout avoir en même temps. Problème de logique, probablement.

    Précision : j'ai bien essayé en créant des tableaux de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $n1 = Array ("menus de niveau 1");
    $n2 = Array ("menus de niveau 2");
    $n3 = Array ("menus de niveau 3");
    $n4 = Array ("menus de niveau 4");
    mais cela ne permet pas de rendre correctement l'arborescence, dans la mesure où les sous-menus ne sont pas liés avec leur menu parent, et qu'ils apparaissent tous, quel que soit le menu parent.

    Dois-je créer un objet, pour manipuler tout ça plus simplement ? Ou y a-t-il une solution en imbriquant plus de tableaux ?

    Merci d'avance de votre réponse.
    L

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    Alors ... Ton problème est tout à fait normal ...

    voyons voir ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    function r_menu( array $elements ){
      echo '<ul>';
      foreach( $elements As $key => $element ){
          echo '<li>' . $key . '</li>';
        if( is_array( $element ) )
          r_menu( $element );
     
      }
      echo '</ul>';
    }
    r_menu( $menu );
    J'espère que ça marchera !

    Bonne chance !

  3. #3
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Sinon tu peux aussi utiliser du XML pour stocker tes informations.
    Et utiliser une feuille de transformation XSLT l'affichage de ton document.

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Momodedf Voir le message
    Sinon tu peux aussi utiliser du XML pour stocker tes informations.
    Et utiliser une feuille de transformation XSLT l'affichage de ton document.
    +1 pour un fichier XML.

    Et si tu ne veux pas de XSLT, SimpleXML te permet de le charger de façon transparente en mémoire pour ensuite le manipuler à ta guise.

    Et oui, ce serait encore plus clair en utilisant des objets, mais cela demande peut-être pas mal de refactoring.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Je ne connaissais pas simpleXML, je vais me plonger dedans, je crois que c'est la bonne réponse. Peut-être que j'aurais dû y penser avant...

    Merci de vos réponses, je reviens marquer le sujet comme résolu dès que j'ai réussi à faire fonctionner la solution.

Discussions similaires

  1. Tableaux imbriqués et instances
    Par sayag dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/06/2007, 17h15
  2. [Tableaux] Deux tableaux imbriqués
    Par djedje37et28 dans le forum Langage
    Réponses: 4
    Dernier message: 23/03/2007, 19h57
  3. [Tableaux] Besoin d'explications sur les tableaux imbriqués
    Par gateaubasque dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2007, 09h12
  4. Réponses: 1
    Dernier message: 22/01/2007, 21h55
  5. [HTML]problème de tableaux imbriqués
    Par tyrann dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 24/03/2006, 15h29

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