635 votes

Impossible d'utiliser un objet de type stdClass comme tableau ?

J'obtiens une erreur étrange en utilisant json_decode() . Il décode correctement les données (je l'ai vu en utilisant print_r ), mais lorsque j'essaie d'accéder à l'information à l'intérieur du tableau, j'obtiens :

Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108

J'ai seulement essayé de le faire : $result['context'] donde $result a les données retournées par json_decode()

Comment puis-je lire les valeurs dans ce tableau ?

29 votes

$result = json_decode('the string', true) ; L'ajout du true renvoie le résultat sous forme de tableau et non de stdClass.

0 votes

Wow, je viens de faire un gros facepalm. xD J'ai déjà utilisé la fonction si souvent, et je trébuche toujours en faisant cette erreur. :D

935voto

Jon Points 194296

Utilisez le deuxième paramètre de json_decode pour qu'il renvoie un tableau :

$result = json_decode($data, true);

239voto

svens Points 5894

La fonction json_decode() renvoie un objet par défaut.

Vous pouvez accéder aux données de la manière suivante :

var_dump($result->context);

Si vous avez des identifiants comme from-date (le trait d'union provoquerait une erreur PHP lors de l'utilisation de la méthode ci-dessus), vous devez écrire :

var_dump($result->{'from-date'});

Si vous voulez un tableau, vous pouvez faire quelque chose comme ceci :

$result = json_decode($json, true);

Ou bien, mettez l'objet dans un tableau :

$result = (array) json_decode($json);

3 votes

J'ai mis du temps à trouver ceci en essayant de trouver un moyen de faire référence à la valeur _destroy en php qui est définie par knockoutjs, donc +1

3 votes

Cette réponse est beaucoup plus qualifiée que la première réponse (la plus cotée) !

177voto

Jin Points 171

Vous devez y accéder en utilisant -> puisqu'il s'agit d'un objet.

Changez votre code de :

$result['context'];

A :

$result->context;

0 votes

Le problème que j'ai est d'essayer d'utiliser la propriété dans un conditionnel if ($result->context = $var) Cela fait en sorte que la propriété soit fixée à la var et renvoie vrai, peu importe.

3 votes

@STWilson vous devriez utiliser un double égal == Dans votre état actuel, vous attribuez $var à la valeur $result->context en utilisant un seul égal = . Et le if statement le lira comme s'il était vide ou non, et si l'élément $var a une valeur, cela signifie qu'il n'est pas vide et qu'il retournera toujours vrai.

0 votes

Pourquoi cette page semble-t-elle indiquer que les deux syntaxes sont autorisées : php.net/manual/fr/sdo.sample.getset.php

100voto

Sander Marechal Points 13699

Utilisez true comme deuxième paramètre de json_decode . Ceci décodera le json dans un tableau associatif au lieu de stdObject instances :

$my_array = json_decode($my_json, true);

Voir la documentation pour plus de détails.

69voto

Wesley van Opdorp Points 8536

Ce n'est pas un tableau, c'est un objet de type stdClass.

Vous pouvez y accéder comme suit :

echo $oResult->context;

Plus d'informations ici : Qu'est-ce que stdClass en PHP ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X