J'obtiens une erreur étrange en utilisant json_decode()
. Il décode correctement les données (je les ai vues utiliser print_r
), mais lorsque j'essaie d'accéder aux informations à 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 faire: $result['context']
où $result
les données sont-elles retournées parjson_decode()
Comment puis-je lire des valeurs à l'intérieur de ce tableau?
Réponses:
Utilisez le second paramètre de
json_decode
pour lui faire retourner un tableau:la source
La fonction
json_decode()
renvoie un objet par défaut.Vous pouvez accéder aux données comme ceci:
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:Si vous voulez un tableau, vous pouvez faire quelque chose comme ceci:
Ou convertissez l'objet en tableau:
la source
Vous devez y accéder en utilisant
->
depuis son un objet.Changez votre code de:
À:
la source
if ($result->context = $var)
Cela provoque la propriété d'être définie sur la var et renvoie true, peu importe.==
, dans votre état actuel, vous attribuez une$var
valeur$result->context
en utilisant un seul égal=
. Et leif statement
lira comme s'il était vide ou non, et si la$var
valeur a alors cela signifie qu'il n'est pas vide et retournera toujours vrai.J'ai le même problème aujourd'hui, résolu comme ceci:
Si vous appelez,
json_decode($somestring)
vous obtiendrez un objet et vous devrez accéder à like$object->key
, mais si vous appelez,json_decode($somestring, true)
vous obtiendrez un dictionnaire et pourrez accéder à like$array['key']
la source
Utiliser
true
comme deuxième paramètre pourjson_decode
. Cela décodera le json en un tableau associatif au lieu d'stdObject
instances:Voir la documentation pour plus de détails.
la source
Ce n'est pas un tableau, c'est un objet de type stdClass.
Vous pouvez y accéder comme ceci:
Plus d'informations ici: Qu'est-ce que stdClass en PHP?
la source
Comme le dit le manuel Php ,
Lorsque nous utilisons
json_decode();
, nous obtenons un objet de type stdClass comme type de retour. Les arguments qui doivent être passés à l'intérieur deprint_r()
doivent être soit un tableau soit une chaîne. Par conséquent, nous ne pouvons pas passer un objet à l'intérieur deprint_r()
. J'ai trouvé 2 façons de gérer cela.Convertissez l'objet en tableau.
Ceci peut être réalisé comme suit.
En accédant à la clé de l'objet
Comme mentionné précédemment, lorsque vous utilisez la
json_decode();
fonction, elle renvoie un objet de stdClass. vous pouvez accéder aux éléments de l'objet à l'aide de->
opérateur.Un, peut également utiliser plusieurs clés pour extraire les sous-éléments au cas où l'objet aurait des tableaux imbriqués.
Ce sont d'autres options pour
print_r()
, commevar_dump();
etvar_export();
PS : Aussi, si vous définissez le deuxième paramètre de l'
json_decode();
àtrue
, il convertit automatiquement l'objet d'unearray();
Voici quelques références:
http://php.net/manual/en/function.print-r.php
http: // php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
la source
Pour obtenir un tableau à la suite d'une chaîne json, vous devez définir le deuxième paramètre comme booléen true.
Sinon, $ result sera un objet std. mais vous pouvez accéder aux valeurs en tant qu'objet.
la source
Vous pouvez convertir un objet stdClass en tableau comme:
stdClsss au tableau
la source
Lorsque vous essayez d'y accéder en tant que
$result['context']
, vous le traitez comme un tableau, l'erreur vous indique que vous avez réellement affaire à un objet, alors vous devez y accéder en tant que$result->context
la source
Voici la signature de la fonction:
Lorsque param est faux, ce qui est par défaut, il retournera un type de php approprié. Vous récupérez la valeur de ce type à l'aide du paradigme object.method.
Lorsque param est vrai, il retournera des tableaux associatifs.
Il renverra NULL en cas d'erreur.
Si vous souhaitez récupérer la valeur via le tableau, définissez assoc sur true.
la source
Parfois, lorsque vous travaillez avec l'API, vous souhaitez simplement conserver un objet un objet. Pour accéder à l'objet contenant des objets imbriqués, vous pouvez procéder comme suit:
Nous supposerons que lorsque vous imprimez l'objet, vous pouvez voir ceci:
Pour accéder à la première partie de l'objet:
Et cela donnerait un "succès"
Maintenant, saisissons les autres parties:
La sortie attendue serait "Robert" avec un saut de ligne.
Vous pouvez également réaffecter une partie de l'objet à un autre objet.
La sortie attendue serait "Robert" avec un saut de ligne.
Pour accéder à la touche "1" suivante, le processus est le même.
La sortie attendue serait "USA"
J'espère que cela vous aidera à comprendre les objets et pourquoi nous voulons garder un objet un objet. Vous ne devriez pas avoir besoin de convertir un objet en tableau pour accéder à ses propriétés.
la source
au lieu d'utiliser les crochets, utilisez l'opérateur objet, par exemple, mon tableau basé sur l'objet de base de données est créé comme ceci dans une classe appelée DB:
pour accéder aux informations j'utilise ce code sur le script du contrôleur:
puis pour afficher les informations que je vérifie pour voir si les appels de service ont été définis et ont un nombre supérieur à 0, rappelez-vous que ce n'est pas un tableau auquel je fais référence, donc j'accède aux enregistrements avec l'opérateur d'objet "->" comme ceci:
la source
J'ai obtenu cette erreur à l'improviste parce que ma connexion Facebook a soudainement cessé de fonctionner (j'avais également changé d'hôtes) et jeté cette erreur. La solution est vraiment facile
Le problème était dans ce code
Fondamentalement, la fonction isset () attend un tableau mais à la place elle trouve un objet. La solution simple consiste à convertir un objet PHP en tableau à l'aide d'un quantificateur (array) . Voici le code fixe.
Notez le quantificateur use off array () en première ligne.
la source
Changez-le pour
la source