Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2010, 01h23   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 3
Points : 3
Par défaut Parcourir un un tableau contenant des array et des stdClass

Bonjour,

J'aimerais pouvoir parcourir cette variable :
Code :
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 :
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 ?
b1510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2010, 01h43   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Donc si ce n'est pas un tableau, mais entre autres un objet, tu exécuteras plus bas :

Code :
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2010, 09h09   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 3
Points : 3
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 :
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 ?
b1510 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2010, 12h17   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
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 :
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2010, 12h49   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 3
Points : 3
Au poil ! Merci chef !
b1510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h39.


 
 
 
 
Partenaires

Hébergement Web