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] Lecture d'une variable contenant plusieurs arrays


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 119
    Points
    119
    Par défaut [Tableaux] Lecture d'une variable contenant plusieurs arrays
    Bonjour,
    Comment faire pour lire une variable array contenant elle même d'autres array ?

    Pour l'instant, je procéde comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($contenu as $key)
    foreach($key as $value)
    echo $value."<br>";
    Mais cela me renvoit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Invalid argument supplied for foreach() in ...
    Une meilleure méthode de parcours existe-t-elle ?
    Merci

  2. #2
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Et comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($contenu as $key) 
    {
       foreach($key as $value) 
       {
          echo $value."<br>";
       }
    }
    Ca va pas mieux?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    d'une part, vérifies avant tes foreach que tes variables sont belles et bien des array(). (indice: is_array() ).

    d'autre part, ta méthode est bonne, mais requière un minimum d'accolades...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (is_array($contenu)){
      foreach($contenu as $key){
        if (is_array($key)){
          foreach($key as $value)
            echo $value."<br>";
        }else{
          echo $key."<br>";
        }
      }
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    xave t'abuse
    laisse moi le temps de répondre quand meme

  5. #5
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Citation Envoyé par Sion_Sempai
    d'une part, vérifies avant tes foreach que tes variables sont belles et bien des array(). (indice: is_array() ).

    d'autre part, ta méthode est bonne, mais requière un minimum d'accolades...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (is_array($contenu)){
      foreach($contenu as $key){
        if (is_array($unContenu){
          foreach($key as $value)
            echo $value."<br>";
        }else{
          echo $key."<br>";
        }
      }
    }
    Y a pas de maximum?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    bin euh... Si aussi

    par contre, grace a toi on voit que j'ai fait un chtiote erreur de syntaxe
    j'avais oublié une parenthèse au 2e if
    j'avais éditer

    Re-Edit : Je m'etais amusé a changé une variable pour un détail mais en fait c'etait pas la peine, du coup en rechangeant j'ai oublié d'en rechanger une...


    pas doué moi ^^'

  7. #7
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Les boucles foreach imbriquées sont inutiles si tu connais à l'avance le nom de tes cléfs.

    Exemple :

    <?php
    $tab&#160;
    =&#160;array&#160;(&#160;&#160;&#160;&#160;&#160;array&#160;(&#160;'nom'&#160;=>&#160;'toto'&#160;,&#160;'prenom'&#160;=>&#160;'titi'&#160;)&#160;,&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array&#160;(&#160;
    'nom'&#160;=>&#160;'tata'&#160;,&#160;'prenom'&#160;=>&#160;'tutu'&#160;)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160&#160;;

    &#160;&#160;&#160;&#160;foreach&#160;(&#160;
    $tab&#160;as&#160;$key&#160;=>&#160;$value&#160;)
    &#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;echo&#160;
    $tab[$key]['nom']&#160;.&#160;'&#160;'&#160;.&#160;$tab[$key]['prenom']&#160;.&#160;'<br&#160;/>'&#160;;
    &#160;&#160;&#160;&#160;}
    ?>

    Phpsyntaxcolor powered by decabodi.com
    En terme de performance le gain est énorme.
    Consultant idéaliste.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par macbook
    Les boucles foreach imbriquées sont inutiles si tu connais à l'avance le nom de tes cléfs.

    Exemple :

    <?php
    $tab
    = array ( array ( 'nom' => 'toto' , 'prenom' => 'titi' ) ,
    array (
    'nom' => 'tata' , 'prenom' => 'tutu' )
    ) ;

    foreach (
    $tab as $key => $value )
    {
    echo
    $tab[$key]['nom'] . ' ' . $tab[$key]['prenom'] . '<br />' ;
    }
    ?>

    Phpsyntaxcolor powered by decabodi.com
    En terme de performance le gain est énorme.
    dans ce cas il faut aussi que le nombre d'element des arrays soit le meme

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Merci beaucoup pour vos réponses !
    Le problème venait effectivement du test is_array pour les sous arrays (j'ai de simples strings parfois)

    Note pour les accolades : lorsque il n'y a qu'une instruction dans la structure elles ne sont pas indispensables.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par MightyDucks
    Merci beaucoup pour vos réponses !
    Le problème venait effectivement du test is_array pour les sous arrays (j'ai de simples strings parfois)

    Note pour les accolades : lorsque il n'y a qu'une instruction dans la structure elles ne sont pas indispensables.
    c'etait le probleme de ton premier foreach qui en contenait plus d'une

    [edit] Après relecture... En fait, a la base, ton code etait bon
    Pas encore l'habitude d'utiliser des boucles imbriquées

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 119
    Points
    119
    Par défaut

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

Discussions similaires

  1. Creer une variable contenant plusieurs onglets
    Par Tomeloale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/11/2008, 06h26
  2. Réponses: 5
    Dernier message: 11/08/2006, 10h29
  3. [Tableaux] rechercher dans une variable array()
    Par tom06440 dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2006, 17h45
  4. Réponses: 5
    Dernier message: 20/09/2005, 22h48
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

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