Foros del Web » Programando para Internet » PHP »

Generar array dinámicamente

Estas en el tema de Generar array dinámicamente en el foro de PHP en Foros del Web. Hola a tod@s Tengo una duda relacionada con la generación de arrays al vuelo que me corroe, pongamos este código de php.net como ejemplo: Código: ...
  #1 (permalink)  
Antiguo 19/06/2008, 02:35
Avatar de Subotai  
Fecha de Ingreso: mayo-2003
Ubicación: Irúnforge
Mensajes: 198
Antigüedad: 20 años, 11 meses
Puntos: 1
Generar array dinámicamente

Hola a tod@s

Tengo una duda relacionada con la generación de arrays al vuelo que me corroe, pongamos este código de php.net como ejemplo:

Código:
/* foreach ejemplo 1: sólo valor*/
$a = array(1, 2, 3, 17);

foreach($a as $v) {
   print "Valor actual de \$a: $v.\n";
}
Bien, lo que yo necesito hacer es lo siguiente, que esta parte
Código:
$a = array(1, 2, 3, 17);
se genere de forma dinámica, es decir, no voy a usar 4 ni 5 valores... sino muchos muchos más y además no puedo escribirlos manualmente...

La forma en la que entiendo yo los arrays quizás sea más parecida al lenguaje C++, es decir, para crear un array que contuviera por ejemplo todos los días del año, crearía un bucle "for" que recorriera del 1 al 12 (los meses) y dentro de ese bucle anidaría otro bucle que recorriera del 1 al 31 (los días)..

No se si me explico.. la pregunta sería como hacer esto mismo (lo de los meses y días) en php, porque por más que busco, solo encuentro arrays inicializados con valores de forma MANUAL y no de forma AUTOMATICA.

Muchísimas gracias :P
  #2 (permalink)  
Antiguo 19/06/2008, 03:15
Avatar de Subotai  
Fecha de Ingreso: mayo-2003
Ubicación: Irúnforge
Mensajes: 198
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Generar array dinámicamente

Bueno ya que nadie responde, ni lee... ¬¬ voy a aumentar la información.

El caso es que lo tengo resuelto de forma manual, cosa que me da ganas de vomitar.. pero al menos funciona. Mi "código" es el siguiente:

Código:
	for ($mes=1; $mes<=12; $mes++){
		$dias = array(
			1=>array('insertar-jornada.php?dia='.'1'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			2=>array('insertar-jornada.php?dia='.'2'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			3=>array('insertar-jornada.php?dia='.'3'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			4=>array('insertar-jornada.php?dia='.'4'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			5=>array('insertar-jornada.php?dia='.'5'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			6=>array('insertar-jornada.php?dia='.'6'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			7=>array('insertar-jornada.php?dia='.'7'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			8=>array('insertar-jornada.php?dia='.'8'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			9=>array('insertar-jornada.php?dia='.'9'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			10=>array('insertar-jornada.php?dia='.'10'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			11=>array('insertar-jornada.php?dia='.'11'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			12=>array('insertar-jornada.php?dia='.'12'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			13=>array('insertar-jornada.php?dia='.'13'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			14=>array('insertar-jornada.php?dia='.'14'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			15=>array('insertar-jornada.php?dia='.'15'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			16=>array('insertar-jornada.php?dia='.'16'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			17=>array('insertar-jornada.php?dia='.'17'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			18=>array('insertar-jornada.php?dia='.'18'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			19=>array('insertar-jornada.php?dia='.'19'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			20=>array('insertar-jornada.php?dia='.'20'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			21=>array('insertar-jornada.php?dia='.'21'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			22=>array('insertar-jornada.php?dia='.'22'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			23=>array('insertar-jornada.php?dia='.'23'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			24=>array('insertar-jornada.php?dia='.'24'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			25=>array('insertar-jornada.php?dia='.'25'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			26=>array('insertar-jornada.php?dia='.'26'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			27=>array('insertar-jornada.php?dia='.'27'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			28=>array('insertar-jornada.php?dia='.'28'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			29=>array('insertar-jornada.php?dia='.'29'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			30=>array('insertar-jornada.php?dia='.'30'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			31=>array('insertar-jornada.php?dia='.'31'.'&mes='.$mes.'&ano='.date('Y'),'linked-day'),
			);				
		echo mostrar_mes(2008,$mes,$dias);
		}
	?>
Que uso con otra función propia para preparar el terreno a la hora de usar una librería que me es realmente útil para manejar calendarios, os dejo el link del autor por si a alguien le viene bien: http://keithdevens.com/software/php_calendar

Como no quiero tener que volver a hacer la chapuza manual que se lee arriba, agradecería que alguien me enseñara a como crear de forma dinámica esas 31 entradas.
Gracias
  #3 (permalink)  
Antiguo 19/06/2008, 04:37
 
Fecha de Ingreso: agosto-2007
Mensajes: 345
Antigüedad: 16 años, 8 meses
Puntos: 21
Respuesta: Generar array dinámicamente

Cita:
Bueno ya que nadie responde, ni lee...
si te leemos, jeje

Te sirve esto:
Código PHP:
class calendario
{
    private 
$ano;
    private 
$bisiesto=0;
    
    public function 
setAno($ano)
    {
        
$this->ano $ano;
        if( ((
$this->ano%4)==0) && (($this->ano%100)!=0) && (($this->ano%400)==0) )
        {
            
$this->bisiesto=1;
        }
    }
    
    public function 
getArrayAno()
    {
        for(
$i=1;$i<=12;$i++)
        {
            for(
$e=1;$e<=$this->maxDias($i);$e++)
            {
                
$arrayAno[$i][$e]="insertar-jornada.php?dia=".$e."&mes=".$i."&ano=".$this->ano;
            }
        }
            return 
$arrayAno;
    }
    
    private function 
maxDias($i)
    {
            if(
$i==2)
            {
                if(
$this->bisiesto==1)
                {
                    return 
29;
                }
                else
                {
                    return 
28;
                }
            }
            else
            {
                if( 
$i==|| $i==|| $i==||  $i==|| $i==|| $i==10 || $i==12)
                {
                    return 
31;
                }
                else
                {
                    return 
30;
                }
            }
    }

Para utilizar la clase:

Código PHP:
$arrayAno = new calendario();
$arrayAno -> setAno(date('Y'));
$arrayAno $arrayAno->getArrayAno();

//ver dia 12 del mes 6
echo $arrayAno[6][12];

//Devuelve:
//insertar-jornada.php?dia=12&mes=6&ano=2008 

Última edición por nx00; 19/06/2008 a las 04:43
  #4 (permalink)  
Antiguo 19/06/2008, 04:43
Avatar de Subotai  
Fecha de Ingreso: mayo-2003
Ubicación: Irúnforge
Mensajes: 198
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Generar array dinámicamente

Muchas gracias por responder!!!!!

Pero ya lo resolví de otra forma xDDD, lo que hice fue esto:

Código:
		for ($mes=1; $mes<=12; $mes++){
		for ($dia=0; $dia<=31; $dia++){
			$dias[$dia]= array('insertar-jornada.php?dia='.$dia.'&mes='.$mes.'&ano='.date('Y'),'linked-day');
		}		
		echo mostrar_mes(2008,$mes,$dias);
	}
Me conviene más de esta forma, puesto que ahora leeré de la bd unos registros que tengo que contrastar con las variables $mes y $día, con un if mostará lo que ves ahora o mostrará otro código para resaltar el día marcado en la bd.

De todas formas me voy a mirar tu código porque parece bastante interesante.
  #5 (permalink)  
Antiguo 19/06/2008, 09:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Generar array dinámicamente

Hola Subotai,

Puedes usar array_push para agregar valores a un arreglo, o usar [] para ello:
Código PHP:
$arreglo = array();
$arreglo[] = "valor";
$arreglo[] = "otro valor";
$arreglo[] = "mas valores"
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 18:32.