Foros del Web » Programando para Internet » PHP »

Array dentro de un bucle

Estas en el tema de Array dentro de un bucle en el foro de PHP en Foros del Web. hola amigos, los molesto con una consulta, tengo el siguiente código que les voy a poner, mediante el cual se genera un grafico dinamico, utilizando ...
  #1 (permalink)  
Antiguo 03/08/2014, 10:04
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Array dentro de un bucle

hola amigos, los molesto con una consulta, tengo el siguiente código que les voy a poner, mediante el cual se genera un grafico dinamico, utilizando la función jpgraph de php:

Código PHP:
<?php
include ('JPGRAPH/src/jpgraph.php');
include (
'JPGRAPH/src/jpgraph_line.php');
include (
'JPGRAPH/src/jpgraph_bar.php');



// Creamos el array de datos, que obtenemos de la base de datos, por ejemplo la cant de clicks hechos en un banner

$ydata = array(18,35,5,2,6,10,3,10,25,29,12,55); //con esto le doy valores a la tabla vertical

// Creamos un nuevo grafico de 350x250 (en este caso yo cambie la medida) es anho x alto
$graph = new Graph(1200250"auto");    
$graph->SetScale"textlin");
$graph->title->Set("Grafico de ejemplo");
// Creamos el grafico basado en el array
$lineplot = new LinePlot($ydata);
$lineplot->SetColor('blue');
// le damos nombre a X y a Y en este caso yo puse Dias y Clicks
$graph->xaxis->title->Set("Días");
$graph->yaxis->title->Set("Clicks");

$graph->xaxis->SetTickLabels(array('A','B','C','D','E','F','G','H','I','J','K','L')); //con esto le doy nombre a los valores de la tabla horizontal

// Agregamos el grafico a la imagen
$graph->Add$lineplot);
// Mostramos la imagen
$graph->Stroke();

?>
pero el asunto es que lo que necesito es que tanto las variables
$ydata
como la variable
$graph
se generen en forma dinámica con los valores que voy a extraer de mi base de datos mediante un bucle for, no se si se entiende mi consulta.
por ejemplo
lo que necesito es que $ydata comprenda dentro del array en este caso los clicks hechos por los usuarios en un banner (esos números de clicks estarán almacenados en una base de datos)
y lo mismo con $graph, solo que en este caso se referirá a los días, en que fueron hechos estos clicks
de modo que en el grafico por ejemplo se vea:
lunes= 20 clicks (representados por la línea grafica obviamente) y asi sucesivamente, como funciona en cualquier grafica en resumen
ya que del modo que lo tengo ahora, yo le estoy asignando manualmente los valores de los arrays
como se hace eso?

muchas gracias
  #2 (permalink)  
Antiguo 03/08/2014, 13:10
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Sería cuestión de que hagas la consulta a la BD, iteres el resultado de la misma y almacenes cada valor encontrado en el array respectivo.

Código PHP:
Ver original
  1. $array1 = array();
  2. $array2 = array();
  3. $query = mysqli_query($conexion, 'SELECT dato1, dato2 FROM tabla');
  4. if (mysqli_num_rows($query)){
  5.     while ($row = mysqli_fetch_array($query)){
  6.         $array1[] = $row['dato1'];
  7.         $array2[] = $row['dato2'];
  8.     }
  9. }

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #3 (permalink)  
Antiguo 03/08/2014, 16:56
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

GE NIAL!!!!!
excelente respuesta, simple y al grano
una consulta mas, probe y funciona con $ydata
pero no con $graph
pero como sería la sintaxis que debo poner para $graph, dentro del bucle?
para $ydata dentro del bucle puse
$ydata[]= $i; //le puse el valor de $i como ejemplo solamente
pero como debe ser para $graph?
muchas gracias

Cita:
Iniciado por Alexis88 Ver Mensaje
Sería cuestión de que hagas la consulta a la BD, iteres el resultado de la misma y almacenes cada valor encontrado en el array respectivo.

Código PHP:
Ver original
  1. $array1 = array();
  2. $array2 = array();
  3. $query = mysqli_query($conexion, 'SELECT dato1, dato2 FROM tabla');
  4. if (mysqli_num_rows($query)){
  5.     while ($row = mysqli_fetch_array($query)){
  6.         $array1[] = $row['dato1'];
  7.         $array2[] = $row['dato2'];
  8.     }
  9. }

Saludos

Última edición por apustilnik; 03/08/2014 a las 17:08
  #4 (permalink)  
Antiguo 03/08/2014, 23:28
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Pues como lo hago en el ejemplo, es decir, supongo que los datos para el array $graph están almacenados en un campo de la tabla en la BD, ¿cierto?, pues si es así, supón que el 'dato2' de mi ejemplo representa a los datos que buscas obtener, así podrás adaptarlo a lo que necesitas. Si tienes alguna duda, muéstranos el código que has elaborado para orientarte mejor.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #5 (permalink)  
Antiguo 04/08/2014, 12:44
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

hola Alexis, como siempre gracias por la respuesta, perfecto, mira, te copio abajo el código tal cual lo tengo ahora, y te explico un par de cositas del mismo:
el código actual lo tengo asi, y el grafico funciona, solo que en la línea horizontal, o sea en la de abajo, lo que correspondería a $graph, no me pone los días correspondientes
Código PHP:
<?php 
include ('JPGRAPH/src/jpgraph.php');
include (
'JPGRAPH/src/jpgraph_line.php');
include (
'JPGRAPH/src/jpgraph_bar.php');



// Creamos el array de datos, que obtenemos de la base de datos, por ejemplo la cant de clicks hechos en un banner
$ydata = array(); //con esto le doy valores a la tabla vertical
//$graph = array();
$a=7

for (
$i=0$i<$a$i++)
{
$ydata[]= $i;
}

// Creamos un nuevo grafico de 350x250 (en este caso yo cambie la medida) es anho x alto
$graph = new Graph(1200250"auto");    
$graph->SetScale"textlin");
$graph->title->Set("Grafico de ejemplo");
// Creamos el grafico basado en el array
$lineplot = new LinePlot($ydata);
$lineplot->SetColor('blue');
// le damos nombre a X y a Y en este caso yo puse Dias y Clicks
$graph->xaxis->title->Set("Días");
$graph->yaxis->title->Set("Clicks");

//$graph = array();

for ($i=0$i<$a$i++) {
$x"a"// esto es solo a modo de prueba
$_SESSION['x'] = $x// esto es solo a modo de prueba
$graph->xaxis->SetTickLabels(array($_SESSION['x'])); //con esto le doy nombre a los valores de la tabla horizontal

}

// Agregamos el grafico a la imagen
$graph->Add$lineplot);
// Mostramos la imagen
$graph->Stroke();

?>
de este código solo vale explicar el detalle de que puse:
$graph->xaxis->SetTickLabels(array($_SESSION['x']));
dentro de un bucle for, buscando que me genere dentro del array tantos elementos como días haya guardados en la base, que es lo que necesito, pero no funciona, solo me muestra un dia, pero lo que necesito es que dentro del array $graph, se generen automáticamente tantos días como se extraigan de la base, no se si se entiende la idea
muchas gracias

Cita:
Iniciado por Alexis88 Ver Mensaje
Pues como lo hago en el ejemplo, es decir, supongo que los datos para el array $graph están almacenados en un campo de la tabla en la BD, ¿cierto?, pues si es así, supón que el 'dato2' de mi ejemplo representa a los datos que buscas obtener, así podrás adaptarlo a lo que necesitas. Si tienes alguna duda, muéstranos el código que has elaborado para orientarte mejor.

Saludos
  #6 (permalink)  
Antiguo 04/08/2014, 13:02
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

No hay necesidad de usar una variable de sesión pues puedes añadir directamente el valor de $x en cada iteración, aunque no estoy seguro de que la forma en que lo haces sea la correcta pues ahí veo que añades un array que contiene un dato por cada iteración del bucle. No sé qué librería estarás usando, pero te sugiero que te fijes bien en la manera en como debes de añadir los datos.

Por otro lado, acá no veo que extraigas datos de una BD, de modo que si lo que deseas es añadir datos resultantes de una consulta, deberás mostrarnos la manera en como los extraes, aunque el ejemplo que te di debería de ser suficiente para que lo implementes y soluciones el problema.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #7 (permalink)  
Antiguo 04/08/2014, 19:56
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

hola Alexis, si, olvide mencionarte que lo de inclulir una sesión dentro del blucle, fue meramente de prueba, algo que no hace a la cuestión
el punto es que, se ve que la variable $graph, como esta puesta ahí, esta instanciando a una función ya prediseñada de jpgraph
porque como te comentaba, con $ydata, haciéndolo tal cual me indicaste funciona perfecto, sea al ponerlo dentro del bucle, como me lo indicaste, me va extrayendo tantos valores como haya en la base (ahí omiti poner la consulta a la base de datos, porque me parecio un dato menor)
pero cuando copio lo hecho con $ydata, y lo aplico a la variable $graph, no funciona del mismo modo, por lo que no me extrae la cantidad de días que figuran en la base de datos y no se porque, agun error debemos estar cometiendo
Cita:
Iniciado por Alexis88 Ver Mensaje
No hay necesidad de usar una variable de sesión pues puedes añadir directamente el valor de $x en cada iteración, aunque no estoy seguro de que la forma en que lo haces sea la correcta pues ahí veo que añades un array que contiene un dato por cada iteración del bucle. No sé qué librería estarás usando, pero te sugiero que te fijes bien en la manera en como debes de añadir los datos.

Por otro lado, acá no veo que extraigas datos de una BD, de modo que si lo que deseas es añadir datos resultantes de una consulta, deberás mostrarnos la manera en como los extraes, aunque el ejemplo que te di debería de ser suficiente para que lo implementes y soluciones el problema.

Saludos
  #8 (permalink)  
Antiguo 04/08/2014, 22:28
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Te va a tocar mostrar el código de esa parte para ver en dónde te estás equivocando.
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #9 (permalink)  
Antiguo 07/08/2014, 20:25
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

hola, disculpas por la demora en la respuesta, retomando el tema
de todos modos, suponiendo que no haga una consulta a la base, que es lo que probé, intenté ponerle, como hice tal cual me dijiste con $ydata, le di el valor de $i dentro del bucle, a $graph, para ver si funcionaba tal cual lo hace con $ydata
pero no funciona, o sea que, debo ponerle a mano la cantidad de valores dentro del array $graph, y esa justamente no es la idea.
la idea es que tal cual lo hace con $ydata, los valores dentro del array $graph, se generen en forma automática, y en este caso vienen siendo los días que voy a extraer de la db.


Cita:
Iniciado por Alexis88 Ver Mensaje
Te va a tocar mostrar el código de esa parte para ver en dónde te estás equivocando.
  #10 (permalink)  
Antiguo 07/08/2014, 21:11
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Mientras no muestres el código actualizado de esa parte, será complicado ayudarte.
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #11 (permalink)  
Antiguo 07/08/2014, 21:37
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

en realidad el código tal cual lo puse en el primer comentario de todos, es el código completo, tal cual lo tengo,
si queres, chequea ese código y dime que es lo que estaría faltando de ahí, a ver si puedo copiarte la parte que falta, no hay problemas

Cita:
Iniciado por Alexis88 Ver Mensaje
Mientras no muestres el código actualizado de esa parte, será complicado ayudarte.
  #12 (permalink)  
Antiguo 07/08/2014, 21:51
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Ojo que te pedí el código actualizado, porque volviendo a ver el último código que mostraste, encuentro esto:

Código PHP:
Ver original
  1. for ($i = 0; $i < $a; $i++) {
  2.     $x= "a";
  3.     $_SESSION['x'] = $x;
  4.     $graph->xaxis->SetTickLabels(array($_SESSION['x']));
  5. }

Y pues, ahí veo que siempre asignas el valor "a" al array. Como dices que buscas añadir los valores de una consulta a la BD, deberías de hacerlo de la forma en como te lo sugerí, pero hasta ahora no veo que hayas implementado esa recomendación.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #13 (permalink)  
Antiguo 08/08/2014, 22:26
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

perfecto, entendí, ahí volvi a modificar el código y lo hice tal cual me lo habias indicado, pero no funciona correctamente, o sea si funciona con $ydata, la cual se encarga de poner valores a la recta vertical, pero no funciona con $graph, la cual se encarga de poner valores a la recta horizontal
en la recta vertical si me pone valores del 1 al 7 (veras que el valor de la variable $a=7)
pero a la recta horizontal también le pone valores del 1 al 7, cuando en realidad, según el ejemplo que te voy a copiar abajo, debería ponerle el valor de $x, según entiendo.
a ver que esta mal en el código siguiente...............

Código PHP:
<?php 
include ('JPGRAPH/src/jpgraph.php');
include (
'JPGRAPH/src/jpgraph_line.php');
include (
'JPGRAPH/src/jpgraph_bar.php');



// Creamos el array de datos, que obtenemos de la base de datos, por ejemplo la cant de clicks hechos en un banner
$ydata = array(); //con esto le doy valores a la tabla vertical
$graph = array(); //con esto le doy valores a la tabla horizontal

$a=7

for (
$i=0$i<$a$i++)
{
$x"2";
$ydata[]= $i;
$graph[]= $x// se supone que a la recta horizontal debería repetir el valor de 2, verdad?...
}

// Creamos un nuevo grafico de 350x250 (en este caso yo cambie la medida) es anho x alto
$graph = new Graph(1200250"auto");    
$graph->SetScale"textlin");
$graph->title->Set("Grafico de ejemplo");
// Creamos el grafico basado en el array
$lineplot = new LinePlot($ydata);
$lineplot->SetColor('blue');
// le damos nombre a X y a Y en este caso yo puse Dias y Clicks
$graph->xaxis->title->Set("Días");
$graph->yaxis->title->Set("Clicks");

//$graph = array();


//$graph->xaxis->SetTickLabels(array($_SESSION['x'])); //con esto le doy nombre a los valores de la tabla horizontal



// Agregamos el grafico a la imagen
$graph->Add$lineplot);
// Mostramos la imagen
$graph->Stroke();

?>
Cita:
Iniciado por Alexis88 Ver Mensaje
Ojo que te pedí el código actualizado, porque volviendo a ver el último código que mostraste, encuentro esto:

Código PHP:
Ver original
  1. for ($i = 0; $i < $a; $i++) {
  2.     $x= "a";
  3.     $_SESSION['x'] = $x;
  4.     $graph->xaxis->SetTickLabels(array($_SESSION['x']));
  5. }

Y pues, ahí veo que siempre asignas el valor "a" al array. Como dices que buscas añadir los valores de una consulta a la BD, deberías de hacerlo de la forma en como te lo sugerí, pero hasta ahora no veo que hayas implementado esa recomendación.

Saludos
  #14 (permalink)  
Antiguo 09/08/2014, 01:28
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

El error es claro: Primero creas y alimentas al array $graph, pero luego asignas a esa variable el objeto Graph, con lo cual todo lo que hiciste antes con esa variable se fue al tacho. Por otro lado, veo que tratas al otro array de esta manera:

Código PHP:
Ver original
  1. $lineplot = new LinePlot($ydata);

Pienso que si haces algo similar con $graph, podría resultar. Por cierto, si siempre vas a asignarle el valor '2', no es necesario que previamente asignes dicho valor a una variable para luego adicionarlo al array, hazlo directamente.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #15 (permalink)  
Antiguo 09/08/2014, 12:49
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

hola Alexis, como siempre gracias
te consulto, cual seria la parte del código, donde me comentas que a $graph le estoy asignando el objeto Graph ?

Cita:
Iniciado por Alexis88 Ver Mensaje
El error es claro: Primero creas y alimentas al array $graph, pero luego asignas a esa variable el objeto Graph, con lo cual todo lo que hiciste antes con esa variable se fue al tacho. Por otro lado, veo que tratas al otro array de esta manera:

Código PHP:
Ver original
  1. $lineplot = new LinePlot($ydata);

Pienso que si haces algo similar con $graph, podría resultar. Por cierto, si siempre vas a asignarle el valor '2', no es necesario que previamente asignes dicho valor a una variable para luego adicionarlo al array, hazlo directamente.

Saludos
  #16 (permalink)  
Antiguo 09/08/2014, 22:19
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Antes de hacerlo, respóndeme con sinceridad, ¿eres el autor del código o lo tomaste de otra parte? Porque si fuera lo primero, te hubieras dado cuenta antes de que te lo diga.

Código PHP:
Ver original
  1. $graph = new Graph(1200, 250, "auto");

En esa línea echaste por tierra lo que hiciste en el bucle. Vuelve a leer la recomendación que te di en el comentario anterior y trata de implementarla.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #17 (permalink)  
Antiguo 10/08/2014, 12:53
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 10 años, 5 meses
Puntos: 6
Respuesta: Array dentro de un bucle

hola, por supuesto que no soy el autor del código!
ese código esta hecho por jpgraph, ellos ponen códigos y uno los adapta a su medida,
voy a probar a ver si funciona y te digo
con respecto a lo que me comentabas en el comentario anterior, valga la redundancia, intente hacerlo, pero no funciona
me tira un error
y relacionado a la línea de código que me comentas, según entiendo esa es la línea que genera la recta horizontal del grafico, no veo porque debería interferir con la cantidad de valores del array $graph

Cita:
Iniciado por Alexis88 Ver Mensaje
Antes de hacerlo, respóndeme con sinceridad, ¿eres el autor del código o lo tomaste de otra parte? Porque si fuera lo primero, te hubieras dado cuenta antes de que te lo diga.

Código PHP:
Ver original
  1. $graph = new Graph(1200, 250, "auto");

En esa línea echaste por tierra lo que hiciste en el bucle. Vuelve a leer la recomendación que te di en el comentario anterior y trata de implementarla.

Saludos
  #18 (permalink)  
Antiguo 10/08/2014, 22:57
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 3 meses
Puntos: 934
Respuesta: Array dentro de un bucle

Creo que te estás confundiendo. Al hacer esto:

Código PHP:
Ver original
  1. $graph = new Graph(1200, 250, "auto");

Sobrescribes la información añadida previamente en $graph por la instancia de la clase Graph, en otras palabras, es como si hicieras esto:

Código PHP:
Ver original
  1. $foo = array(1, 2, 3); //$foo contiene un array con los elementos 1, 2 y 3
  2. $foo = new Bar(); //$foo es una instancia de la clase Bar, ya no contiene al array

Por eso fue que te dije que sería mejor que uses otra variable para crear la instancia de la clase Graph y que a este le asignes el contenido de $graph tal y como lo haces con $lineplot y $ydata, claro, siempre y cuando se pueda (que es lo que presumo). Fue por esto que te pregunté si eras el autor del código, porque una cosa es que uses una librería y otra es que no te des cuenta de los errores que estás cometiendo y que son bastante obvios. Me da la impresión de que solamente hubieras copiado y pegado a ciegas el código de algún ejemplo que encontraste por ahí y si es así, esta es tu oportunidad para enmendar el error.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»

Etiquetas: bucle, tabla, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:22.