Todos nos hemos visto en algún momento con la necesidad de recorrer un objeto JSON en PHP.
Imaginar que tenemos una consulta a base de datos y lo que nos devuelve la función es un JSON.
Por ejemplo:
[
{"name":"Madrid","y":"58"},
{"name":"Granada","y":"21"},
{"name":"Segovia","y":"12"},
{"name":"La Rioja","y":"3"},
{"name":"Toledo","y":"3"}
]
Lo primero que tenemos que hacer para trabajar fácilmente con esta estructura en PHP es decodificar el JSON. Para ello usaremos la función json_decode(). El JSON lo tenemos en una variable, donde hemos recogido el resultado de nuestra función que accede a la base de datos.
$resultados = recuperaInfoDeLaBaseDeDatos(.....);
esta función la tenéis que desarrollar vosotros.
Después de ejecutar la función, en nuestra variable $resultados tendríamos guardado el objeto JSON. Algo así sería:
$resultados = [{"name":"Madrid","y":"58"},{"name":"Granada","y":"21"},{"name":"Segovia","y":"12"},{"name":"La Rioja","y":"3"},{"name":"Toledo","y":"3"}]
Aplicamos la función json_decode() a nuestra variable $resultados.
$array = json_decode($resultados, true);
Esta función, según la documentación oficial de PHP, lo que hace es «Convierte un string codificado en JSON a una variable de PHP». Básicamente convierte un JSON en un objeto Array.
Y ahora lo que hacemos es recorrer la variable $array.
foreach ($array as $value) {
$cadena = "El nombre de la provincia es: '". $value['name'] ."', y su puntuación es: ". $value['y'] ."},";
print ($cadena);
}
El resultado sería:
El nombre de la provincia es: Madrid, y su puntuación es: 58
El nombre de la provincia es: Granada, y su puntuación es: 21
El nombre de la provincia es: Segovia, y su puntuación es: 12
El nombre de la provincia es: La Rioja, y su puntuación es: 3
El nombre de la provincia es: Toledo, y su puntuación es: 3
El código completo sería:
$resultados = recuperaInfoDeLaBaseDeDatos(.....);
$array = json_decode($resultados);
foreach ($array as $value) {
$cadena = "El nombre de la provincia es: '". $value['name'] ."', y su puntuación es: ". $value['y'] ."},";
print ($cadena);
}