php y json nested: ¿cómo puedo acceder a este elemento?

Aquí está el texto json:

{ "data": { "current_condition": [{ "cloudcover": "75", "humidity": "63", "observation_time": "03:41 PM", "precipMM": "0.0", "pressure": "1020", "temp_C": "15", "temp_F": "59", "visibility": "16", "weatherCode": "116", "weatherDesc": [{ "value": "Partly Cloudy" }], "weatherIconUrl": [{ "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png" }], "winddir16Point": "SSE", "winddirDegree": "160", "windspeedKmph": "7", "windspeedMiles": "4" }], "request": [{ "query": "Northville, United States Of America", "type": "City" }], "weather": [{ "date": "2013-09-24", "precipMM": "0.0", "tempMaxC": "20", "tempMaxF": "67", "tempMinC": "8", "tempMinF": "47", "weatherCode": "113", "weatherDesc": [{ "value": "Sunny" }], "weatherIconUrl": [{ "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" }], "winddir16Point": "ESE", "winddirDegree": "111", "winddirection": "ESE", "windspeedKmph": "10", "windspeedMiles": "6" }] } 

}

Estoy intentando hacer eco de ‘temp_F’ y no está funcionando. No puedo entender lo que estoy haciendo mal. Llego hasta aquí:

 $url = file_get_contents("http://blahblahblahblah"); $arr = json_decode($url,true); 

Y ahí es donde todo falla. Hice var_dump así que sé que la información está allí. Pero cada bash de ‘eco’ que he intentado solo da como resultado que ‘Array’ se muestre en la pantalla. He intentado muchas variaciones de lo siguiente:

 echo $arr->{'data'}->{'current_condition[0]'}->{'temp_F'}; 

¿Puede alguien decirme qué estoy haciendo mal? ¡Gracias!

json_decode() con TRUE como segundo parámetro te da una matriz asociativa. Pero actualmente estás intentando acceder a él como un objeto.

Pruebe lo siguiente:

 echo $arr['data']['current_condition'][0]['temp_F']; 

Así no es como accedes a las matrices en PHP

 $array['index']="value"; echo $array['index1']['index2'] 

Para tu ejemplo:

 echo $arr['data']['current_condition'][0]['temp_F'] 

Puede usar json para recuperar el resultado de json a una variable y luego usar la información de la variable para mostrar en js.

 $.ajax({ 'type': 'GET', 'url': 'abc.com, 'dataType': 'json', success: function (data) { var response = data; // alert(response.data.current_condition) //something like that // for (var i = 0; i < response.length; i++) { } }