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 :

Parcourir un un tableau contenant des array et des stdClass


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Parcourir un un tableau contenant des array et des stdClass
    Bonjour,

    J'aimerais pouvoir parcourir cette variable :
    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
     
    object(stdClass)#1 (1) {
      ["RESULT"]=>
      array(2) {
        [0]=>
        object(stdClass)#2 (3) {
          ["status"]=>
          string(9) "installed"
          ["backup"]=>
          int(1289226198)
          ["details"]=>
          object(stdClass)#3 (2) {
            ["foo"]=>
            int(0)
            ["bar"]=>
            int(0)
          }
        }
        [1]=>
        object(stdClass)#4 (3) {
          ["status"]=>
          string(11) "uninstalled"
          ["backup"]=>
          NULL
          ["details"]=>
          object(stdClass)#5 (2) {
            ["foo"]=>
            int(2)
            ["bar"]=>
            int(4)
          }
        }
      }
    }
    Je sais qu'il faut utiliser la récursivité (je ne connais pas à l'avance le nombre de dimensions) donc, j'utilise la fonction suivante pour parcourir mon tableau :

    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
     
    function afficher_tableau($tableau)  
        { 
        // on fait une boucle qui lit les éléments du tableau 
        foreach ($tableau as $cle=>$valeur)  
            { 
            // si l'un des éléments est lui même un tableau 
            // alors on applique la fonction à ce tableau 
            if(is_array($valeur))  
                { 
                // on affiche le nom de la clé et 
                // le début d'une liste pour 
                //  décaler le contenu vers la droite 
                echo $cle.' : <ul>';  
     
                // ici se réalise la récursivité 
                // c'est à dire qu'on applique la fonction 
                // à l'élément en cours car c'est lui aussi un tableau 
                afficher_tableau($valeur);  
     
                // on ferme la liste 
                echo '</ul>';  
                } 
     
            // si ce n'est pas un tableau 
            // alors on affiche le contenu de l'élément 
            else 
                { 
                		echo $cle.' = '.$valeur.' <br>';	         
                } 
            }  
        }
    Mais à l'exécution, j’obtiens cette erreur : Catchable fatal error: Object of class stdClass could not be converted to string in C:\wamp\www\js\testSteek\test.php on line 72

    Je comprend bien que je ne peux pas afficher un objet, mais comment faire ?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Donc si ce n'est pas un tableau, mais entre autres un objet, tu exécuteras plus bas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $cle.' = '.$valeur.' <br>';
    ... probablement d'où le message d'erreur.

    Le cas échéant il faut afficher la valeur dans la cas où tu n'es ni face à un tableau et ni à un objet, fonction is_object( ) pour compléter les tests.

    Si ce n'est pas suffisant donne-nous du code fonctionnel à tester.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    En fait, j'ai une variable $a brute. Je dois la lister et y insérer des valeurs. Pour l'instant, je n'arrive pas à la lister.

    Voici du code fonctionnel :

    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
     
    // j'ai une variable comme ca : 
    $a = $a = '{"RESULT": [{"status": "installed", "backup": 1289226198,"details": {"foo": 0, "bar": 0}}, {"status": "uninstalled", "backup": null,"details": {"foo": 2, "bar": 4}}]}';
     
    // je dois lister l'interieur de la variable et ajouter une valeur'
     
    $obj = json_decode($a);
     
    function afficher_tableau($tableau)  
        { 
        // on fait une boucle qui lit les éléments du tableau 
        foreach ($tableau as $cle=>$valeur)  
            { 
            // si l'un des éléments est lui même un tableau 
            // alors on applique la fonction à ce tableau 
            if(is_array($valeur))  
                { 
                // on affiche le nom de la clé et 
                // le début d'une liste pour 
                //  décaler le contenu vers la droite 
                echo $cle.' : <ul>';  
     
                // ici se réalise la récursivité 
                // c'est à dire qu'on applique la fonction 
                // à l'élément en cours car c'est lui aussi un tableau 
                afficher_tableau($valeur);  
     
                // on ferme la liste 
                echo '</ul>';  
                } 
     
            // si ce n'est pas un tableau 
            // alors on affiche le contenu de l'élément 
            else 
                { 
                	if (!is_object($valeur)) {
                		echo $cle.' = '.$valeur.' <br>';
                	}	         
                } 
            }  
        }  
     
    afficher_tableau($obj);
    Ca me retourne : //RESULT :
    Comment "entrer" dans la hiérarchie d'un stdClass pour pouvoir en afficher son contenu ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par b1510 Voir le message
    Comment "entrer" dans la hiérarchie d'un stdClass pour pouvoir en afficher son contenu ?
    Le foreach( ) peut itérer sur les propriétés de tes stdClass.

    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
    <?php
     
    $a = '{"RESULT": [{"status": "installed", "backup": 1289226198,"details": {"foo": 0, "bar": 0}}, {"status": "uninstalled", "backup": null,"details": {"foo": 2, "bar": 4}}]}';
    $obj = json_decode($a);
     
    function afficher_tableau($tableau)
    {
        // on fait une boucle qui lit les éléments du tableau
        foreach ($tableau as $cle=>$valeur) {
            if( is_array($valeur) || is_object($valeur) ) {
                echo $cle.' : <ul>';
                afficher_tableau($valeur);
                echo '</ul>';
            } else {
                echo $cle.' = '.$valeur.' <br>';
            }
        }
    }
     
    afficher_tableau($obj);
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Au poil ! Merci chef !

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

Discussions similaires

  1. Manipulation des pointeurs sur des array of record
    Par kracter56 dans le forum Débuter
    Réponses: 8
    Dernier message: 13/04/2012, 09h58
  2. [Tableaux] Insérer des arrays dans des arrays
    Par DJ Caësar 9114 dans le forum Langage
    Réponses: 2
    Dernier message: 01/06/2009, 13h03
  3. [Tableaux] Pb avec des array et des boucles help !
    Par grandpa006 dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2008, 12h06
  4. Réponses: 4
    Dernier message: 31/08/2007, 17h28
  5. Réponses: 3
    Dernier message: 23/01/2007, 08h14

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