Foros del Web » Programando para Internet » PHP »

Pregunta sobre arreglos

Estas en el tema de Pregunta sobre arreglos en el foro de PHP en Foros del Web. Hola Maestros: Quiero saber como puedo llenar una matriz en donde la clave sea el mes y el valor los dias que le pertenecen a ...
  #1 (permalink)  
Antiguo 19/04/2003, 19:12
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
Pregunta sobre arreglos

Hola Maestros:

Quiero saber como puedo llenar una matriz en donde la clave sea el mes y el valor los dias que le pertenecen a ese mes.

Problema:


estoy utilizando mysql para mis consultas y apartir de esa consulta quiero insertar los valores a mi matriz, es decir, yo hago una consulta de varios meses y lo que quiero es una vez hecha mi consulta splitear mi campo fecha y apartir de ahi poner unas condiciones para llenar mi matriz .

ya cheque en el manual pero ahi ya vienen asignados directamente los valores y quiero saber como los puedo llenar con un foreach o con un for.

espero me haya explicado.
  #2 (permalink)  
Antiguo 19/04/2003, 19:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te refieres a "arrays asociativos"?

$meses_dias=array("enero"=>31,"febrero"=>28,"marzo "=>"30" ... etc);

Y accedes a cada valor por:

echo $meses_dias['nombre_mes'];

O arrays bidimensionales asociativas .. tipo:

Código PHP:
$meses_dias['enero'][1]="algo aquí";
$meses_dias['enero'][2]="algo aquí";
$meses_dias['enero'][3]="algo aquí";
$meses_dias['enero'][4]="algo aquí";
$meses_dias['enero'][5]="algo aquí";

$meses_dias['febrero'][1]="algo aquí";
$meses_dias['febrero'][2]="algo aquí";
$meses_dias['febrero'][3]="algo aquí";
$meses_dias['febrero'][4]="algo aquí";
$meses_dias['febrero'][5]="algo aquí";

// etc .. 
Si fuera este 2º caso .. con un par de bucles foreach() anidados podrías recorrer todos los dias de todos los menes:

Código PHP:
foreach($meses_dias as $mes=>$dias){
   echo 
$mes."<br>";
   foreach (
$dias as $dia=>$evento_dia){ 
     echo 
$dia." => ".$evento_dia."<br>";
   }

En este caso .. cargar tu array bidimensional con los datos de tu consulta SQL . habría que ver como lo obtienes para ir dandole en el bucle que uses para obtener esos datos los indices asociativos del mes (arrays de meses por ejemplo ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 19/04/2003 a las 19:30
  #3 (permalink)  
Antiguo 19/04/2003, 19:31
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
asi lo obtengo

si me refiero a los arrays asociativos

Código PHP:
<?php

   $mensaje 
$HTTP_POST_VARS['mensaje'];
   
$estacion $HTTP_POST_VARS['estacion'];
   
$byr $HTTP_POST_VARS['byr'];
   
$eyr $HTTP_POST_VARS['eyr'];
   
$bmo $HTTP_POST_VARS['bmo'];
   
$emo $HTTP_POST_VARS['emo'];
   
$bdy $HTTP_POST_VARS['bdy'];
   
$edy $HTTP_POST_VARS['edy'];
   
$bhr $HTTP_POST_VARS['bhr'];
   
$ehr $HTTP_POST_VARS['ehr'];
   
$fechainicio $byr."-".$bmo."-".$bdy;
   
$fechafin $eyr."-".$emo."-".$edy;
   
$comando "elimina_archivos.php";
   include (
$comando);
   
$nombre date("YmdHis",time());
   
$x "";
   
$NivOblig = array (1000,925,850,700,500,400,300,250,200,150,100);     //Arreglo de Niveles obligatorios.


   
$link mysql_connect("localhost","root","admin");
   
mysql_select_db("RADIOSONDEO",$link);
   
if (
$mensaje == "TTBB"){
       
       
$tabla "TTAA".$estacion;
       
$sql "SELECT DISTINCT Fecha,Hora,Estacion,PP,HGT,TT,TD,DD,FF from $tabla where Fecha >= '$fechainicio' and Fecha <= '$fechafin' and Hora >= '$bhr' and Hora <= '$ehr'";
       
$result mysql_query($sql,$link);
     
    
       do{
          
          
//aqui haria el split para obtener los meses y los dias
        
}while($row mysql_fetch_array($result));
  #4 (permalink)  
Antiguo 19/04/2003, 19:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues me quedé igual con el código que pusistes ;( ... Todavía no sé que datos pretendes guardar en ese array .. o solo quieres hacer algun tipo de consulta a tu tabla y obtener no se qué dados ..

Explicate algo mejor (lo siento pero hoy estoy duro de mollera xD)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 19/04/2003, 19:43
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
lo que quiero es que apartir de mi consulta llenar mi array es decir , que al generar la consulta ya se que meses consulto esto se guarda en las variables $bmo y $emo que son mes de inicio y mes final apartir de esto poner una condicion para llenar mi matriz.

es decir, checar que dias pertenecen a cada mes y asociarcelos

espero con eso o tedeje igual?
  #6 (permalink)  
Antiguo 19/04/2003, 19:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm a ver si entendí ..

do{
echo $row['fecha']; // ahí tienes una fecha formato: aaaa-mm-dd (con o sin hora ..? .. parece que nó pues tienes un campo Hora (cuando podrías haber usado un DATETIME que guarda Fecha y hora .. )



}while($row = mysql_fetch_array($result));

A partir de ahí .. que quieres hacer ..

** desglosar esa fecha por su MES y asignar a un array tipo:

$array_bidimensional[$mes][$dia]="lo que le corresponda a ese mes";

Es eso?
(si pones los datos de ejemplo que obtienes y que es lo que quieres obter (tipo del array, fijate en los ejemplos que te puse mas arriba) será mejor ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 19/04/2003, 19:56
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
si asi es lo que quiero obtener es algo parecido a lo que poner arriba pero en lugar de

$meses_dias['enero'][1]="algo aquí";

algo asi:

$meses_dias['1'][1]="algo aquí";

para poder asi hacer otra consulta pero ahora utilizando mi matriz, es decir, seleccionando los dias que le corresponden al primer mes una vez terminando de recorrer el mes y sus dias pasarme al segundo y sus dias.

no se si me explique?
  #8 (permalink)  
Antiguo 19/04/2003, 20:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm Pues mas o menos es lo que te puse .. (en tu bucle while() donde obtienes esos registros .. )

$array_bidimensional[$mes][$dia]="lo que le corresponda a ese mes";

Pero creo que lo que necesitas es hacer una consulta SQL nueva con esas condiciones que ahora estas diciendo ... Creo que sería lo mas optimo que ir duplicando datos en un array cuando están en tu BD para que los consultes con el lenguaje SQL ....

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 19/04/2003, 22:29
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
estoy mal

Perdon Maestro Cluster:

creo que estoy haciendo las cosas mal lo que requiero es meterlo a un arreglo bidimensional en donde en la primer columna se mete el mes y en la segunda el dia.

algo asi:

$arreglo [0][0]=1;
$arreglo [0][1]=1;

pero dentro de la consulta.
  #10 (permalink)  
Antiguo 19/04/2003, 23:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y el mes que arroja tu consulta .. como lo obtienes? donde está? ..

Ya te comenté mas arriba que te fijes:

do{
echo $row['fecha']; // ahí tienes una fecha formato: aaaa-mm-dd (con o sin hora ..? .. parece que nó pues tienes un campo Hora (cuando podrías haber usado un DATETIME que guarda Fecha y hora .. )



}while($row = mysql_fetch_array($result));

A partir de ahí .. que quieres hacer ..

** desglosar esa fecha por su MES y asignar a un array tipo:

$array_bidimensional[$mes][$dia]="lo que le corresponda a ese mes";

En ese campo "fecha" .. sabes ya como obtener el mes de esa fecha? .. y el dia? ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 20/04/2003, 18:21
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
datos sobre la fecha

el mes y el dia de la fecha lo obtengo haciendoun split a lo que traiga $row[Fecha] y a partir de ahi lo que quiero es hacer un array bidimensional en el cual le va a ser de 2 columnas en la cual la primera columna representarian el mes y la segunda el dia.

solo quiero llenar mi arreglo bidimensional con esos valores.

no se si me explico?

la fecha viene en formato yyyy-mm-dd.


la consulta la hago asi:

Código PHP:
$sql "SELECT DISTINCT Fecha,Hora,Estacion,PP,HGT,TT,TD,DD,FF from $tabla where Fecha >= '$fechainicio' and Fecha <= '$fechafin' and Hora >= '$bhr' and Hora <= '$ehr'";
       
$result mysql_query($sql,$link);
     if (
$row=mysql_fetch_array($result)){
     
$registros mysql_num_rows($result);   
    
       do{
          
          
          
$dia split('[-]',$row[Fecha]);
          
       }while(
$row mysql_fetch_array($result)); 
aqui a $dia es un arreglo en el cual en;

$dia[1] guardo el mes
$dia[2] guardo el dia

y ahora con esos datos quiero llenar mi array bidimensional.

Última edición por payo22; 20/04/2003 a las 18:23
  #12 (permalink)  
Antiguo 20/04/2003, 19:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. usa esos datos como INDICES del array bidimensional como te he comentado varias veces:

Código PHP:
$mes=$dia[1];
$dia=$dia[2];

$array_bidimensional[$mes][$dia]="lo que le corresponda a ese mes"
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 22/04/2003, 12:15
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
ya me quedo Maestro Cluster gracias por todo el apoyo

no se si se buena idea poner el codigo por si a alguien le sirve o como ve usted?
  #14 (permalink)  
Antiguo 22/04/2003, 12:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Como gustes, pero para ver como quedó todo .. estaría bueno que lo pusieses .. (y no me llames de Ud. xDD) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 28/04/2003, 12:37
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
perdon por la tardanza

aqui esta el codigo:


Código PHP:
<?php

   $link 
mysql_connect("localhost","usuario","password");
   
mysql_select_db("BASE_DE_DATOS",$link);
   
if (
$mensaje == "TTBB"){
       
       
$tabla "TTAA".$estacion;
       
$sql "SELECT DISTINCT Fecha,Hora,Estacion,PP,PS,HGT,TT,TD,DD,FF from $tabla where Fecha >= '$fechainicio' and Fecha <= '$fechafin' and Hora >= '$bhr' and Hora <= '$ehr'";
       
$result mysql_query($sql,$link);
       
$mes $bmo;
       
$dia $bdy;
     if (
$row=mysql_fetch_array($result)){
          
$registros mysql_num_rows($result);   
         
$i=0;
           
$j=0;
            do{
             
$dia split('[-]',$row[Fecha]);
               
$arreglo_mes[$j][$i]=$dia[1];
               
$arreglo_mes[$j+1][$i]=$dia[2];
               
$arreglo_mes[$j+2][$i]=$row[PS];
               echo 
"MES: ".$arreglo_mes[$j][$i]." DIA: ".$arreglo_mes[$j+1][$i]." PS: ".$arreglo_mes[$j+2][$i]=$row[PS]."<br>";
               
$j=0;
               
$i++;
             }while(
$row mysql_fetch_array($result));
            
$i=0;
            
$j=0;
            
$k=0;
            
$l=0;
            for (
$i=0;$i<$registros;$i++){  // en este for descarto los dias duplicados para un mes
                   
if ($arreglo_mes[1][$i]==$arreglo_mes[1][$i+1]){ // es decir que guardo los dias
                          
continue;                                 //si es igual continuo con el siguiente
                    
}                                               //valor .
                    
else{                                            //si el valor no es igual lo meto en el arreglo.
                         
$arreglo_mesdias[0][$l]=$arreglo_mes[0][$i];
                         
$arreglo_mesdias[1][$l]=$arreglo_mes[1][$i];
                         
                         
$l++;
                         
$k++;
                     }
            }

            echo 
"registros: ".$registros."<br>";
            echo 
"valor de K ".$k."<br>";
         
           
$i=0;
          
$j=0;
             
         echo 
"arreglo procesado <br>";     //y en este solo me muestra los dias de cada mes 
          
for ($i=0;$i<$k;$i++){           //que es lo que voy a utilizar.
                
for($j=0;$j<2;$j++){
                    
                  echo 
$arreglo_mesdias[$j][$i];
                    if (
$j==2){echo "<br>";}
                 }
          }

           



        echo 
"<p><a href = form_consulta.php>Volver</p> \n";
        }else{
          echo 
"<p> No se encontro ningun registro!</p> \n";
          echo 
"<p><a href = form_consulta.php>Volver</p> \n";
         }
   
   }    
?>
si no le entienden a algo por favor diganme con mucho gusto lo explicare mejor.
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 14:48.