Pregunta
Escenario:
$x = json_decode( $x );
foreach ( $x as $item )
{
$info[] = $item; //ERROR
}
Estoy haciendo un bucle a través de una fuente de datos para obtener los datos. Quiero agregar elementos a un objeto stdClass en un bucle. ¿Como podría hacerlo? No estoy tan familiarizado con stdobj.
Solución
Si espera que json_decode devuelva una matriz, podría hacer lo siguiente:
$x = json_decode( $x, true ); // returns associative array instead of object
$info = (object) $x;
Se puede encontrar más información y ejemplos aquí .
Otros consejos
Si te comprendo correctamente, deberías poder seguir la sintaxis de los objetos para obtener el resultado que deseas. Agregue el segundo parámetro opcional a json_decode
establecido en true
para obtener su json descodificado como una matriz asociativa, ya que parece que esta es la forma en la que lo está usando .
$info = new stdClass();
$x = json_decode( $x, true );
foreach ( $x as $key => $val) {
$info->$key = $val;
}
Sin embargo, como señaló Ignas, los resultados de json_decode ()
ya regresan como un objeto stdClass, por lo que si solo usaste $ x = json_decode ($ x)
, no necesitarías $ info
en absoluto ... ya tendrías $ x
como un objeto stdClass.
SPL
's ArrayObject
te permite usar la misma sintaxis que genera un error en tu ejemplo. Esto se proporciona si tiene la capacidad de usar un ArrayObject
en lugar de un stdClass
.