Foros del Web » Programando para Internet » PHP »

los arrays caducan ?

Estas en el tema de los arrays caducan ? en el foro de PHP en Foros del Web. Me pasa una cosa bien extraña..... Tengo una variable que contiene un array,....luego utilizo este array para obtener un valor. Hasta aqui bien,..... Luego mas ...
  #1 (permalink)  
Antiguo 08/04/2003, 15:23
 
Fecha de Ingreso: febrero-2003
Mensajes: 204
Antigüedad: 14 años, 10 meses
Puntos: 2
los arrays caducan ?

Me pasa una cosa bien extraña.....

Tengo una variable que contiene un array,....luego utilizo este array para obtener un valor.

Hasta aqui bien,.....

Luego mas adelante necesito cojer otro valor del mismo array, ..... si utilizo la misma variable de antes que contenia el array,........no me funciona,........tengo que declarar de nuevo el array (construirlo de nuevo) para que me recoja el valor......

Es normal eso ?
  #2 (permalink)  
Antiguo 08/04/2003, 15:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Un array de por sí solo tiene validez en el tiempo de ejecución de tu script .. en el momento que "recargas" la página o pretendes leer ese array en otra página (script) .. ya se pierde ..

Para eso puedes "incluir" la declaración de ese array .. y si es "dinamico" el contenido del array lo puedes propagar bien por el URL, guardado en una cookie/session .. en una Base de datos temporal .. en un archivo de texto plano .. Cualquier médio que sea "fijo" .. o temporal como una session o cookie.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 09/04/2003, 02:47
 
Fecha de Ingreso: febrero-2003
Mensajes: 204
Antigüedad: 14 años, 10 meses
Puntos: 2
Pongo este corto ejemplo`para que lo podais valorar.

Es una pequeña aplicacion que traduce el mes introducido abreviado en letras a su numero de mes numerico

<html>
<head>
<title>ejemplo array</title>
</head>
<body>
<?
// lee variables de fecha
$mes_i = "Abr";
$mes_s = "Abr";
$myArraymeses=array('Ene','Feb','Mar','Abr');
while (list ($key, $val) = each ($myArraymeses) ){
if ( $val == $mes_i)
{$mes_i = ++$key;}
}

$myArraymeses=array('Ene','Feb','Mar','Abr');//si no la declaro de nuevo, no funciona
while (list ($key, $val) = each ($myArraymeses) ){
if ( $val == $mes_s)
{$mes_s = ++$key;}
}
echo $mes_i;
echo '<br>';
echo $mes_s;
?>
</body>
</html>
  #4 (permalink)  
Antiguo 09/04/2003, 12:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te sucede porque la forma que usas para recorrer el Array (ese list() con each() en un bucle while) deja el "puntero" interno del array "Al final" cuando termina ese bucle .. Por eso, cuando quieres leer otra vez el array .. no puede leer nada pues está el puntero del array al final ..

Para llevar el puntero al principio del array debes usar: (despues de cada llamada de tu bucle que recorre el array )

Código PHP:
reset($myArraymeses); 
...

Si usas un bucle tipo foreach() para recorrer el un array no es neceario que uses "reset()" pues lo hace automáticamente ademas q el ejemplo que pusistes se resume en un par de líneas de codigo .. usando simplemente:
Código PHP:
<?
$mes_i 
"Abr";
$myArraymeses=array(1=>'Ene','Feb','Mar','Abr');
$mes_numero=array_keys($myArraymeses,$mes_i);
echo 
$mes_numero[0];
?>
array_keys() busca el indice del elemento que digas .. La salida (lo que entrega es un array .. he de ahé el $mes_numero[0] q es donde tenemos nuestro resultado ..)

Como veras tambien, inicializo el indice (key) del array en 1 (con 1=> .. ) así no he de ir sumando +1 al resultado que tenga ..

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; 09/04/2003 a las 12:24
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:05.