2012-05-25 19 views
17

Se pregunta por qué mi código PHP no mostrará todos "valor" de los "valores" en los datos JSON:matriz de análisis de JSON con foreach PHP

$user = json_decode(file_get_contents($analytics)); 
foreach($user->data as $mydata) 
{ 
    echo $mydata->name . "\n"; 

}   
foreach($user->data->values as $values) 
{ 
    echo $values->value . "\n"; 
} 

La primera foreach funciona bien, pero la segunda lanza un error.

{ 
    "data": [ 
     { 
     "id": "MY_ID/insights/page_views_login_unique/day", 
     "name": "page_views_login_unique", 
     "period": "day", 
     "values": [ 
      { 
       "value": 1, 
       "end_time": "2012-05-01T07:00:00+0000" 
      }, 
      { 
       "value": 6, 
       "end_time": "2012-05-02T07:00:00+0000" 
      }, 
      { 
       "value": 5, 
       "end_time": "2012-05-03T07:00:00+0000" 
      }, ... 
+0

¿Cuál es el error? Cuéntanos cuál es el resultado. –

+0

¿'$ user-> data' es una matriz? Porque lo atraviesas con foreach. –

+0

El error es: Advertencia: argumento no válido proporcionado para foreach(). $ user-> data parece ser una matriz de [0]; – ToddN

Respuesta

36

Usted tal vez quería hacer lo siguiente:

foreach($user->data as $mydata) 

    { 
     echo $mydata->name . "\n"; 
     foreach($mydata->values as $values) 
     { 
       echo $values->value . "\n"; 
     } 
    }   
+0

¡Esto es lo que estaba buscando! Extraño, pensé que había intentado esto, gracias. – ToddN

+0

¡Muchas gracias, esto es lo que estaba buscando! –

6

tiene que decirle a ella que el índice de data de uso, o de doble bucle a través de todos.

Por ejemplo, para obtener los valores en el cuarto índice de la matriz fuera .:

foreach($user->data[3]->values as $values) 
{ 
    echo $values->value . "\n"; 
} 

que pasar por todo:

foreach($user->data as $mydata) 
{ 
    foreach($mydata->values as $values) { 
     echo $values->value . "\n"; 
    } 

} 
4

$user->data es una matriz de objetos. Cada elemento de la matriz tiene una propiedad name y value (y otras).

Intenta poner el 2nd foreach dentro de la 1ra.

foreach($user->data as $mydata) 
{ 
    echo $mydata->name . "\n"; 
    foreach($mydata->values as $values) 
    { 
     echo $values->value . "\n"; 
    } 
} 
+0

Sí, gracias @Rocket esto es lo que necesitaba, Jonas respondió primero = p – ToddN

+0

@ToddN: Maldito, derrotado por 76 segundos :-P –