Domanda
Scenario:
$x = json_decode( $x );
foreach ( $x as $item )
{
$info[] = $item; //ERROR
}
Sto eseguendo il ciclo continuo di un feed di dati per ottenere i dati. Voglio aggiungere elementi a un oggetto stdClass in un ciclo. Come potrei farlo? Non ho molta familiarità con stdobj.
Soluzione
Se si prevede che json_decode restituisca un array, è possibile effettuare le seguenti operazioni:
$x = json_decode( $x, true ); // returns associative array instead of object
$info = (object) $x;
Ulteriori informazioni ed esempi sono disponibili qui .
Altri suggerimenti
Se ti capisco correttamente, dovresti essere in grado di seguire la normale sintassi degli oggetti per ottenere il risultato desiderato. Aggiungi il secondo parametro facoltativo a json_decode
impostato su true
per far decodificare il tuo json come array associativo, come se questo fosse il modulo in cui lo stai utilizzando .
$info = new stdClass();
$x = json_decode( $x, true );
foreach ( $x as $key => $val) {
$info->$key = $val;
}
Come ha sottolineato Ignas, i risultati di json_decode ()
tornano già come oggetto stdClass, quindi se hai appena usato $ x = json_decode ($ x)
, non avresti bisogno di $ info
... avresti già $ x
come oggetto stdClass.
ArrayObject
?? SPL
> usiamo la stessa sintassi che genera un errore nel tuo esempio. Questo a condizione che tu abbia la possibilità di usare un ArrayObject
invece di un stdClass
.