PHP - Recorrer Array a partir de Json

   
Vista:
Imágen de perfil de Jean Carlo

Recorrer Array a partir de Json

Publicado por Jean Carlo (4 intervenciones) el 21/12/2017 22:53:21
Hola a todos, vengo aquí con la esperanza de encontrar un poco de ayuda. De verdad que soy un novato en programación con escasos recursos económicos, jejeje.

Si no de pana que le pagaría a alguien que hiciera esto. Estoy tratando de implementar lo siguiente:

Hay un página web que me ofrece, lo que podríamos decir un archivo json, por lo menos, la estructura se ve así.

El resultado pinta más o menos así:
{"COP": {"avg_12h": "48212401.45", "volume_btc": "18.15840927", "avg_24h": "49211003.59", "avg_1h": "46741995.81", "rates": {"last": "47999901.70"}, "avg_6h": "48170867.80"}, "USD": {"avg_12h": "17540.15", "volume_btc": "114.07469137", "avg_24h": "17602.80", "avg_1h": "16805.73", "rates": {"last": "22684.48"}, "avg_6h": "17375.62"}, ...

Y así sigue con todas las divisas, estoy accesando con ella través de
file_get_contents("https://localbitcoins.com//bitcoinaverage/ticker-all-currencies/");

Perfecto, no hay problema con eso.

Luego, como asumo que estoy frente a un json,

Decodifico y el código ya va así:
$data = file_get_contents("https://localbitcoins.com//bitcoinaverage/ticker-all-currencies/");

//Decodificamos para imprimir
$decode = json_decode($data, true);
Cuando imprimo con var_dump, me arroja un array (72)

Y cada uno de los esos 72 elementos son Objetos, como se puede observar en el ejemplo que copie arriba, para desglosar uno:
'COP' =>
array (size=6)
'avg_12h' => string '45661962.69' (length=11)
'volume_btc' => string '19.98471294' (length=11)
'avg_24h' => string '47012071.97' (length=11)
'avg_1h' => string '44092422.38' (length=11)
'rates' =>
array (size=1)
'last' => string '42999999.91' (length=11)
'avg_6h' => string '45291704.86' (length=11)

Y como ven, tiene un array anidado, estos datos se actualizan dinámicamente, como pueden ver son los datos de localbitcoins.

¿Qué quiero hacer?
Algo más o menos así:

Peso Colombiano (COP)
Promedio 1H: "avg_1h"
Promedio 6H: "avg_6h"
Promedio 12H: "avg_12h"
Promedio 24H: "avg_24h"
Volumento BTC: "volume_btc"

Así con cada divisa y que me imprima el valor actual cada vez que alguien ingrese a ese post de wordpress. Yo sé que puedo acceder a cada objeto, de hecho realicé un

var_dump($decode{'VEF'});

Y esto es lo que me aparece:

/home/academi6/public_html/probando.php:14:
array (size=6)
'avg_12h' => string '1631682573.63' (length=13)
'volume_btc' => string '28.66136049' (length=11)
'avg_24h' => string '1685806820.41' (length=13)
'avg_1h' => string '1574019114.26' (length=13)
'rates' =>
array (size=1)
'last' => string '1534100221.96' (length=13)
'avg_6h' => string '1584920601.81' (length=13)

Pero si hago echo $decode{'VEF'};

Me imprime 'Array', y entiendo porque la variable es un Array.

Mi pregunta, es ¿alguién conocerá cuál bucle es más conveniente para llenar esos datos como lo indique arriba? Y si me pueden dar un ejemplo mejor, porque llevo casi 1 semana para llegar hasta aquí. Agradecido de antemano.

Pueden ver el archivo en acción en https://academiaaguilasdoradas.com.ve/probando.php

No sea que cuando alguien lea esto ya lo haya resuelto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Recorrer Array a partir de Json

Publicado por Miguel (210 intervenciones) el 22/12/2017 00:08:59
Fácil:

1
2
3
4
5
6
7
8
9
foreach ($jsonData as $moneda => $info)
{
    echo "<h3> $moneda </h3>";
    echo "<p>";
    echo "<b> Promedio 1H: </b> " . $info["avg_1h"] . " <br> ";
	echo "<b> Promedio 6H: </b> " . $info["avg_6h"] . " <br> ";
    // imprimir otros datos
    echo "</p>";
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jean Carlo

Recorrer Array a partir de Json

Publicado por Jean Carlo (4 intervenciones) el 23/12/2017 03:20:53
Muchas gracias Miguel por el aporte, bastante bueno la verdad, el caso es que ya había encontrado la solución antes de ver tu respuesta, pero si hice algo bastante similar a lo tuyo. Voy a considerar tu código para ver si puedo mejorar el que tengo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzerox

Recorrer Array a partir de Json

Publicado por abzerox (139 intervenciones) el 22/12/2017 00:13:04
Hola, estoy seguro que hay una manera mucho más optima de lograrlo pero en este momento como primer recurso te puedo dar esta solución:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
$data = json_decode($data = file_get_contents("https://localbitcoins.com//bitcoinaverage/ticker-all-currencies/"), true);
 
foreach($data as $k => $v) {
    echo "<h1>$k</h1>";
    if (is_array($v)) {
        foreach($v as $x => $z) {
            if (is_array($z)) {
                foreach($z as $i => $t) {
                    echo "<p><b>$i</b>: $t</p>";
                }
            } else {
                echo "<p><b>$x</b>: $z</p>";
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jean Carlo

Recorrer Array a partir de Json

Publicado por Jean Carlo (4 intervenciones) el 23/12/2017 03:24:29
Muchas gracias por esta respuesta, pero no era lo que buscaba. Pero si intente hacer eso, creo que mi pregunta estaba mal formulada porque no sabía que era exactamente como se llamaba lo que iba hacer. Pero gracias a Dios resolví, la verdad que antes de ver sus respuesta.

Gracias por contestar tan rápido, la verdad que no me esperaba algo así por ello me puse a trabajar para resolver lo más pronto posible.

Ya pueden ver la Implementación en mi blog de wordpress.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jean Carlo

Recorrer Array a partir de Json

Publicado por Jean Carlo (4 intervenciones) el 23/12/2017 03:37:28
Quiero dar por concluida esta respuesta y dejar el código que finalmente implementé para el desarrollo que necesitaba, de verdad que era algo tan sencillo pero para alguien que sabe muy poco de PHP le parecía algo complicado, espero que le pueda servir en un futuro a otros compañeros:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
			//Obtenemos el JSON desde localbitcoins
			$data = file_get_contents("https://localbitcoins.com//bitcoinaverage/ticker-all-currencies/");
 
			//Decodificamos para extraer el array
			$decode = json_decode($data, true);
 
                        /* Cuando paso var_dump a $decode, me arroja un array de longitud 72
                       Esta longitud representa 72 objetos y cada objeto contiene a su vez un array anidado, 
                       los objetos contienen posición=>valor, donde lo que quería era tomar sólo su valor */
 
			//Este es un objeto, el Caso del Bolívar Fuerte Venezolano
			$vef = $decode{'VEF'};
 
			// Un Título para Bolívar Fuerte
			echo "<h2 id='vef'><strong>Bolívar Fuerte Venezolano (VEF)</strong></h2>";
 
			// Creamos la tabla para vaciar los datos VEF
			echo "<table>";
				echo "<tbody>";
					echo "<tr>";
						// Promedio VEF 1 Hora
						$prom_1 = $vef['avg_1h'];
						// Configuramos el formato numero
						$vef_num1 = number_format($prom_1, 2, ',', '.');
                                                //Introducimos los valores en la celdas, idem para el resto
						echo "<td><strong>Prom 1H:</strong></td>";
						echo "<td>$vef_num1</td>";
					echo "</tr>";
					echo "<tr>";
						// Promedio VEF 6 Horas
						$prom_6 = $vef['avg_6h'];
						// Configuramos el formato numero
						$vef_num6 = number_format($prom_6, 2, ',', '.');
						echo "<td><strong>Prom 6H:</strong></td>";
						echo "<td>$vef_num6</td>";
					echo "</tr>";
					echo "<tr>";
						// Promedio VEF 12 Horas
						$prom_12 = $vef['avg_12h'];
						// Configuramos el formato numero
						$vef_num12 = number_format($prom_12, 2, ',', '.');
						echo "<td><strong>Prom 12H:</strong></td>";
						echo "<td>$vef_num12</td>";
					echo "</tr>";
					echo "<tr>";
						// Promedio VEF 24 Horas
						$prom_24 = $vef['avg_24h'];
						// Configuramos el formato numero
						$vef_num24 = number_format($prom_24, 2, ',', '.');
						echo "<td><strong>Prom 24H:</strong></td>";
						echo "<td>$vef_num24</td>";
					echo "</tr>";
					echo "<tr>";
						// Volumen en Bitcoin
						$prom_btc = $vef['volume_btc'];
						// Configuramos el formato numero
						$vef_btcv = number_format($prom_btc, 8, ',', '.');
						echo "<td><strong>Vol en BTC:</strong></td>";
						echo "<td>$vef_btcv</td>";
					echo "</tr>";
				echo "</tbody>";
			echo "</table>";
 
//Se repite el proceso para cada símbolo.

Es importante resaltar, que decidí escribir el código html con php porque la implementación la estoy realizando en un blog de wordpress y necesito un plugin para poder insertar el código php dentro del artículo. Ya lo pueden ver, clic aquí.

Espero en un futuro implementar el bucle foreach o algo similar que me propuso el compañero Miguel, ya que eso me ahorraría bastante líneas de código.

El asunto es que cada objeto es un array identificado con las 3 letras de la divisa del país que representa, si lo logro perfeccionar con algún bucle, con gusto lo copio aquí.

Gracias por su ayuda, a los dos compañeros que intervinieron.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Revisar política de publicidad