2010-09-20 10 views
10

Sono abbastanza nuovo per gli array ancora. Ho bisogno di aiuto - ho qualche JSON, e ho gestito attraverso un po 'di PHP che analizza fondamentalmente il JSON e decodifica come segue:PHP/JSON - stdClass Object

stdClass Object 
(
    [2010091907] => stdClass Object 
     (
     [home] => stdClass Object 
      (
       [score] => stdClass Object 
        (
         [1] => 7 
         [2] => 17 
         [3] => 10 
         [4] => 7 
         [5] => 0 
         [T] => 41 
        ) 

       [abbr] => ATL 
       [to] => 2 
      ) 

Questa realtà va avanti e avanti - MA - il mio problema è la stdClass Object parte. Devo essere in grado di chiamare questo in un ciclo for e quindi scorrere tutte le sezioni (home, score, abbr, to, etc). Come andrei su questo?

risposta

21

È possibile utilizzare get_object_vars() per ottenere un array delle proprietà dell'oggetto oppure chiamare json_decode() con json_decode($string,true); per ottenere un array associativo.


Esempio:

<?php 
$foo = array('123456' => 
array('bar' => 
     array('foo'=>1,'bar'=>2))); 


//as object 
var_dump($opt1 = json_decode(json_encode($foo))); 

echo $opt1->{'123456'}->bar->foo; 

foreach(get_object_vars($opt1->{'123456'}->bar) as $key => $value){ 
    echo $key.':'.$value.PHP_EOL; 
} 

//as array 
var_dump($opt2 = json_decode(json_encode($foo),true)); 

echo $opt2['123456']['bar']['foo']; 

foreach($opt2['123456']['bar'] as $key => $value){ 
    echo $key.':'.$value.PHP_EOL; 
} 
?> 

uscita:

object(stdClass)#1 (1) { 
    ["123456"]=> 
    object(stdClass)#2 (1) { 
    ["bar"]=> 
    object(stdClass)#3 (2) { 
     ["foo"]=> 
     int(1) 
     ["bar"]=> 
     int(2) 
    } 
    } 
} 
1 
foo:1 
bar:2 

array(1) { 
    [123456]=> 
    array(1) { 
    ["bar"]=> 
    array(2) { 
     ["foo"]=> 
     int(1) 
     ["bar"]=> 
     int(2) 
    } 
    } 
} 
1 
foo:1 
bar:2 
+0

Ho eseguito il 'json_decode ($ string, true);', tuttavia, ho riscontrato dei problemi con il numero di riferimento dell'array. Ad esempio, il numero è 2010091907 ma quando rilascio 'foreach ($ json-> 2010091907 come $ game)', viene visualizzato l'errore 'Errore Parse: errore di sintassi, T_LNUMBER imprevisto, in attesa di T_STRING o T_VARIABLE' – drewrockshard

+0

Usa' $ json- > {'2010091907'} 'per i nomi delle variabili 'illegali'. – Wrikken

+0

Quasi lì: 'foreach ($ json -> {'2010091907'} come $ game)', viene visualizzato l'errore: 'Attenzione: argomento non valido fornito per foreach()'. fai riferimento al mio output sopra per JSON to ARRAY. Devo essere in grado di chiamare i dati e questi sembrano essere array ricorsivi (non sono sicuro di quello che è ufficialmente chiamato). – drewrockshard

2

È possibile scorrere sul stdClass con foreach.

+2

Accidenti, hai ragione. Perché le persone di PHP non hanno la decenza di rendere 'stdClass instanceof Traversable? True mi chiedo .... – Wrikken

Problemi correlati