Question
Scénario:
$x = json_decode( $x );
foreach ( $x as $item )
{
$info[] = $item; //ERROR
}
Je boucle dans un flux de données pour obtenir les données. Je veux ajouter des éléments à un objet stdClass dans une boucle. Comment je ferais ça? Je ne connais pas très bien stdobj.
La solution
Si vous vous attendez à ce que le code_json renvoie un tableau, procédez comme suit:
$x = json_decode( $x, true ); // returns associative array instead of object
$info = (object) $x;
Plus d’informations et d’exemples peuvent être trouvés ici .
Autres conseils
Si je vous ai bien compris, vous devriez pouvoir suivre la syntaxe standard des objets pour obtenir le résultat souhaité. Ajoutez le deuxième paramètre facultatif à json_decode
défini sur true
pour obtenir votre json décodé en tant que tableau associatif, car il semble que ce soit le formulaire dans lequel vous l'utilisez. .
$info = new stdClass();
$x = json_decode( $x, true );
foreach ( $x as $key => $val) {
$info->$key = $val;
}
Comme Ignas l'a fait remarquer, les résultats de json_decode ()
sont déjà renvoyés sous forme d'objet stdClass. Par conséquent, si vous venez d'utiliser $ x = json_decode ($ x)
, vous n’auriez pas besoin de $ info
du tout ... vous auriez déjà $ x
en tant qu’objet stdClass.
ArrayObject
SPL
> vous permet d'utiliser la même syntaxe qui génère une erreur dans votre exemple. Ceci est fourni à condition que vous puissiez utiliser un ArrayObject
au lieu d'un stdClass
.