Foros del Web » Programando para Internet » PHP »

redimensionar una matriz

Estas en el tema de redimensionar una matriz en el foro de PHP en Foros del Web. Buenas, Tengo una consulta q rellena una matriz. Me gustaria saber somo se puede hacer para poder añadir una columna mas a la matriz. El ...
  #1 (permalink)  
Antiguo 13/04/2005, 08:15
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta redimensionar una matriz

Buenas,
Tengo una consulta q rellena una matriz. Me gustaria saber somo se puede hacer para poder añadir una columna mas a la matriz.
El codigo es el siguiente:
Código PHP:
$sql="SELECT DISTINCT data.any,data.setmana,ticketsetmana.total
 FROM data LEFT JOIN ticketsetmana ON data.setmana=ticketsetmana.setmana
WHERE (((ticketsetmana.id_tenda)="
.$tenda.") or ((ticketsetmana.id_tenda)is null))  GROUP BY data.setmana  ORDER BY data.setmana";
$res=mysql_query($sql); 
$numeroRegistros=mysql_num_rows($res);
$data = array(); 
while(
$row mysql_fetch_row($res)) 

      
$data[] = array($row2[0],$row2[1],$row2[2]); 

Gracias
Saludos
  #2 (permalink)  
Antiguo 13/04/2005, 08:23
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Código PHP:
$data[] = "valordelacoluimnanueva 
  #3 (permalink)  
Antiguo 13/04/2005, 10:25
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta

Si lo hago asi se me come la ultima columna de la matriz.
Como puede meter el resultado de la segunda consulta el la matriz¿?¿?
Código PHP:
$sql2="SELECT DISTINCT data.any,data.setmana,ticketsetmana.total
FROM data LEFT JOIN ticketsetmana ON data.setmana=ticketsetmana.setmana
WHERE (((ticketsetmana.id_tenda)="
.$tenda.") or ((ticketsetmana.id_tenda)is null)) AND data.any=2005 GROUP BY data.setmana ORDER BY data.setmana";
$res2=mysql_query($sql2); 
$numeroRegistros=mysql_num_rows($res2);
$data = array(); 
while(
$row2 mysql_fetch_row($res2)) 
 { 
    
$data[] = array($row2[0],$row2[1],$row2[2]); 
 }
$sql2="SELECT DISTINCT data.any,data.setmana,ticketsetmana.total
FROM data LEFT JOIN ticketsetmana ON data.setmana=ticketsetmana.setmana
WHERE (((ticketsetmana.id_tenda)="
.$tenda.") or ((ticketsetmana.id_tenda)is null))AND data.any=2004  GROUP BY data.setmana ORDER BY data.setmana";
while(
$row2 mysql_fetch_row($res2)) 
 { 
           
$data[]=$row2[2]; 
 } 

Última edición por sergi_climent; 13/04/2005 a las 10:33
  #4 (permalink)  
Antiguo 13/04/2005, 10:52
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
quieres agragar una nueva columana a cada fila? Entonces estas seguro que la cantidad de resultados en ambas consulta es la misma, verdad? Para esto deberias de usar indices entonces, y en la segunda consulta algo asi:

$sql2="SELECT DISTINCT data.any,data.setmana,ticketsetmana.total
FROM data LEFT JOIN ticketsetmana ON data.setmana=ticketsetmana.setmana
WHERE (((ticketsetmana.id_tenda)=".$tenda.") or ((ticketsetmana.id_tenda)is null))AND data.any=2004 GROUP BY data.setmana ORDER BY data.setmana";
$i=0;
while($row2 = mysql_fetch_row($res2))
{
array_push($data[$i],$row2[2]); //agregas un dato mas a cada subarreglo
$i++;
}

Si me e equivocado o te entendi mal disculpa.
Saludos
  #5 (permalink)  
Antiguo 14/04/2005, 00:52
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta

Wenas...
Sigo con lo mismo, probe esto q me dijiste MartinTandil pero me da el siguiente error:

Warning: array_push(): First argument should be an array in C:\Archivos de programa\Apache Group\Apache2\htdocs\LAPANERA\LAPANERA\manteniment \proba.php on line 94

en la linia 94 hay esto:
Código PHP:
array_push($data[$i],$row2[2]); 

Llevo ya un par de dias con esto y no hay manera de conseguirlo...
El codigo completo q tengo es el siguiente:
Código PHP:
While($row mysql_fetch_row($res)):stress
{
$tenda=1;
$sql2="SELECT DISTINCT data.any,data.setmana,ticketsetmana.total
FROM data LEFT JOIN ticketsetmana ON data.setmana=ticketsetmana.setmana
WHERE (((ticketsetmana.id_tenda)="
.$tenda.") or ((ticketsetmana.id_tenda)is null)) AND data.any=2005 GROUP BY data.setmana ORDER BY data.setmana";
$res2=mysql_query($sql2); 
$numeroRegistros=mysql_num_rows($res2);
$data = array(); 
while(
$row2 mysql_fetch_row($res2)) 

      
$data[] = array($row2[0],$row2[1],$row2[2]); 
}
$sql2="SELECT DISTINCT data.any,data.setmana,ticketsetmana.total
FROM data LEFT JOIN ticketsetmana ON data.setmana=ticketsetmana.setmana
WHERE (((ticketsetmana.id_tenda)="
.$tenda.") or ((ticketsetmana.id_tenda)is null))AND data.any=2005 GROUP BY data.setmana ORDER BY data.setmana";
$i=0;
while(
$row2 mysql_fetch_row($res2)) 

array_push($data[$i],$row2[2]);  
$i++;

He puesto la misma consulta para poder saber sobreseguro q tengo los mismos registros.

Gracias por vuestra ayuda...

Saludos

Última edición por sergi_climent; 14/04/2005 a las 05:29
  #6 (permalink)  
Antiguo 14/04/2005, 01:53
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Sino se puede de esta manera... alguna sugerencia para poder sacar adelante el tema¿?

Saludos
  #7 (permalink)  
Antiguo 14/04/2005, 13:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
De echo no esta viendo a cada $data[$i] como un array.Es raro, esto es una ayuda de la pagina de php:

Array_push also works fine with multidimensional arrays. Just make sure the element is defined as an array first.

<?php
$array["element"][$element]["element"] = array();
array_push ($array["element"][$element]["element"], "banana");
?>

Donde, si no veo mal, deberia de andar.
Saludos.
PD:No te aporte nada nuevo, disculpa
  #8 (permalink)  
Antiguo 14/04/2005, 14:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero ¿por qué quieres hacerlo vía PHP si trabajas con SQL? .. Podrías trasladar tu pregunta también al foro de "Base de datos" explicando bien que es lo que deseas hacer y que tablas son las implicadas para que te dén la mejor sentencia SQL para tal fin.

Un saludo,
  #9 (permalink)  
Antiguo 15/04/2005, 00:41
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Buenas,
necesito crear el array para generar un grafico... ya comente en un post por aqui q lo explicava un poco. Solo quiero saber como puedo redimensionar la matriz para poder meter mas de un resultado dentro de esta matriz.

Es que con una sola sentencia sql no la veo factible para lo q tengo q hacer.

Basicamente tengo q crear un grafico comparativo, es decir un grafico linial de la facturacion de la tienda, del año en curso comparado con los anteriores, entonces una sola sentencia sql no me sirve, aparte q si consiguiera una cada año tendria q canviarla y eso tampoco puedo hacerlo.

Cada punto de la matriz representa un punto en el grafico:la funcion del grafico es la PHPLOT.
donde
array(punto1grafico1,punto1grafico2...)
array(punto2grafico1,punto2grafico2...)....
y asi se genera el grafico linial.

estoy abierto a cualquier sugerencia,

Gracias de antemano

Saludos
  #10 (permalink)  
Antiguo 15/04/2005, 03:55
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Perdonar por mi insistencia pero hoy ya es el 3er dia q estoy metido en esto y se me acaban las ideas... estoy abierto a cualquier sugerencia...
alguna idea de como poder meter el resultado de diferentes consultas en una misma matriz?
Gracias por todo,
Saludos
  #11 (permalink)  
Antiguo 15/04/2005, 07:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
ya comente en un post por aqui q lo explicava un poco.
Ok, .. pero comprende que no todo el mundo está al tanto de tus -otros mensajes- así que lo ideal en estos casos es:

1) continuar tu mensaje inicial.
2) hacer referencia al anterior (para que sirva como introducción).

Un saludo,
  #12 (permalink)  
Antiguo 15/04/2005, 07:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Para que te hagas una idea ..

Esto:
Código PHP:
$data[] = array($row2[0],$row2[1],$row2[2]); 
Es lo mismo que:
Código PHP:
$data[0][0]=$row[0];
$data[0][1]=$row[1];
$data[0][2]=$row[2];

$data[1][0]=$row[0];
$data[1][1]=$row[1];
$data[1][2]=$row[2];

// etc ... 
Así que si en otro bucle tienes que añadir más "columnas" a ese array bidimensional ..

Podrías hacer:
Código PHP:
// para el segundo y subsiguientes ...
$indice=count($data)+1;
While (......){
   
$data[$indice][3]=$row[0];
   
$data[$indice][4]=$row[1];
   
$indice++;


(realmente no sé que dato requieres de tu 2° consulta SQL .. pero es un ejemplo para que veas donde debes comenzar a numerar tus campos de tu "columna" nueva a añadir.)

Otro detalle será que tu array (el primero) tendrá que tener esas N "columnas" definidas .. aunque no tenga valor en ese caso una de ellas.

$datos[]=array($row[0],$row[1],$row[2],$row[X]);

¿O tal vez no nos entendemos . .y no necesitas añadir una "columna" nueva a ese array sino "elementos" (datos) para esas columnas dadas.?. La pregunta que me hago viene dada por qué no me he leido la documentación de "PHPlot" .. así que .. podrías esperar la respuesta de un usuario de dicha classe o bien explicar que tipo de datos requiere (en que formato de que array) para generar esas gráficas.

Si tienes dudas de como te está quedando el array o ver que estructura tiene actualmente puedes usar:

Código PHP:
echo "<pre>";
print_r($data);
echo 
"</pre>"
ahí veras más claro que tipo de array estás componiendo .. para que puedas formarla como necesitas. Si con esto todavía no te queda claro .. indica que tipo de array te debe quedar (esquema, no como array(1,2,3, ...) para verlo mejor ..

Un saludo,

Última edición por Cluster; 15/04/2005 a las 07:40
  #13 (permalink)  
Antiguo 15/04/2005, 08:42
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Buaaaaa, no sabes el peso q me acabas de quitar de encima... y a mas el viernes por la tarde... Va de perlas, era justamente lo q queria hacer. Solo era eso situarme por indices y subindices pero no encontraba la manera..
Muchisimas Gracias Cluster, y a todos los q me habeis ayudado.

Saludos y gracias!!!!
  #14 (permalink)  
Antiguo 15/04/2005, 08:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. ahora para que quede como "documentación" para alguien que use PHPLOT y esté en el mismo problema (que supongo que será problema común de usuarios de esa classe) .. pon el código final que resultó.

Un saludo,
  #15 (permalink)  
Antiguo 15/04/2005, 09:04
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Es solamente lo q has puesto , lo unico q lo he adaptado a mis consultas.
Código PHP:
$sql="Consulta";
$res=mysql_query($sql); 
$numeroRegistros=mysql_num_rows($res);
while(
$row mysql_fetch_row($res)) 

$data[]= array($row[1],$row[2],$row[X]);
 
//donde row[X]sera la columna q añadiremos
}
$sql2="Consulta2";
$indice=0
echo(
$indice);
$res2=mysql_query($sql2); 
while(
$row2 mysql_fetch_row($res2)) 

   
$data[$indice][2]=$row2[2]; 
//en caso de querer mas valores
//$data[$indice][3]=$row2[3]; 
//$data[$indice][...]=$row2[...]; 
   
$indice++; 
}

$graph->SetDataValues($data); 
Muchas gracias por todo y espero q le sirva a alguien....
Saludos
  #16 (permalink)  
Antiguo 15/04/2005, 10:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Sería recomendable dejar ese "row[x]" que puse sólo como referencia .. a una cadena vacia:

Código PHP:
$data[]= array($row[1],$row[2],''); 
//donde row[X]sera la columna q añadiremos 
Un saludo,
  #17 (permalink)  
Antiguo 15/04/2005, 10:17
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
tienes toda la razon, como los valores q paso para generar el grafico son numericos he puesto un 0 asi no hay valores nulos y evitamos el error!

Saludos
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 02:07.