2010-09-20 21 views
10

Todavía soy bastante nuevo en las matrices. Necesito ayuda - Tengo un poco de JSON, y he ejecutar a través de algunos de PHP que básicamente analiza el JSON y lo decodifica la siguiente manera:PHP/JSON - stdClass Objeto

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 
      ) 

En realidad, esto sigue y sigue - pero - mi problema es el stdClass Object parte. Necesito poder llamar esto en un bucle for y luego repetir en cada sección (home, score, abbr, to, etc.). ¿Cómo voy a hacer esto?

Respuesta

21

Puede usar get_object_vars() para obtener una matriz de las propiedades del objeto, o llame al json_decode() con json_decode($string,true); para obtener una matriz asociativa.


Ejemplo:

<?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; 
} 
?> 

Salida:

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

He hecho el 'json_decode ($ string, true);', sin embargo, tengo problemas llamados el número al que se hace referencia para la matriz. Por ejemplo, el número es 2010091907 pero cuando publico 'foreach ($ json-> 2010091907 como $ game)', aparece el error 'Error de análisis: error de sintaxis, inesperado T_LNUMBER, esperando T_STRING o T_VARIABLE' – drewrockshard

+0

Use' $ json- > {'2010091907'} 'para nombres de variables 'ilegales'. – Wrikken

+0

Casi allí: 'foreach ($ json -> {'2010091907'} as $ game)', aparece el error: 'Advertencia: argumento no válido proporcionado para foreach()'. referencia mi salida anterior para el JSON a ARRAY. Necesito poder llamar a los datos y estos parecen ser matrices recursivas (no estoy seguro de cómo se llama oficialmente). – drewrockshard

2

Se puede recorrer en el stdClass con foreach.

+2

Maldición, tienes razón. ¿Por qué la gente de PHP no tuvo la decencia de hacer 'stdClass instanceof Traversable' verdadero, me pregunto .... – Wrikken

Cuestiones relacionadas