Foros del Web » Programando para Internet » PHP »

Error Undefined offset

Estas en el tema de Error Undefined offset en el foro de PHP en Foros del Web. Php me da un NOTICE (warning) de este tipo: Notice: Undefined offset: 3 Me lo da al recorrer un array que tiene tres posiciones ( ...
  #1 (permalink)  
Antiguo 18/04/2008, 10:34
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 4 meses
Puntos: 2
Error Undefined offset

Php me da un NOTICE (warning) de este tipo:
Notice: Undefined offset: 3

Me lo da al recorrer un array que tiene tres posiciones ( [0],[1],[2] ) ocupadas.
lo recorro asi: for ($i=0 ; $array[$i] ; ++$i)

Todo funciona perfectamente pero me gustaría que no diera ese NOTICE

Un saludo
  #2 (permalink)  
Antiguo 18/04/2008, 10:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Re: Error Undefined offset

te lo da porke esta mal tu "codigo" ... dice ke no existe un tal indice 3 osea... un tal [3] del arreglo ke usas....

dentro de tu for() ¿¿como haces la comparacion?? asi no debes...

asi si...

for($i=0,$c=count($arr); $i<$c; $i++)
{
print $arr[$i];
}

si te das cuenta, los indices referidos existen... y con tu bucle.... pues nadamas comprobaba ke existiera $array[$i] y de ahi, el NOTICE.... ke no deja de ser un error....

o prueba haciendole asi a tu codigo....

for ($i=0 ; isset($array[$i]) ; ++$i)
// no?
  #3 (permalink)  
Antiguo 18/04/2008, 10:46
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: Error Undefined offset

vale.........lo que me suponia...... De todas formas me gustaría optimizarlo lo maximo posible por eso no uso foreach.
De tus dos posibilidades, la primera creo que es mas lenta por el hecho de tener que primero que determinar el tamaño del array llamando a la funcion count.

El segundo, el de isset me parece mas atractivo....pero que opinas en cuanto a optimizacion? se te ocurre alguno mas rapido? .......entre los dos que pones...el mas eficiente seria el segundo, no?

pd. (ambos funcionan perfectamente)

Un saludo y gracias
  #4 (permalink)  
Antiguo 18/04/2008, 11:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Re: Error Undefined offset

pienso ke el primero es mas util... ya ke generamos la variable $c para asi poderla usar, si keremos... dentro del ciclo, para cualkier cosa.....

aun asi, las 2 me parecen optimas... no te fijes, pero recomiendo ke si son arreglos sencillos...

array(1,2,3) uses el 1'er for() si son arreglos tipo array(1=>2,3=>4,5=>6) usa un foreach()

PDTA: procura condicionar tus ciclos.... ya ke si no lo haces pueden generarte mas problemas....
  #5 (permalink)  
Antiguo 19/04/2008, 04:45
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: Error Undefined offset

Nose...es que dentro de mi bucle en ningun momento hago uso del valor del count() .......... asi que nose..........yo creo que usare el isset?

A mi me parece algo más eficiente....pero tampoco estoy muy seguro.....si alguein mas puede aportar algo....

Un saludo
  #6 (permalink)  
Antiguo 19/04/2008, 15:32
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Error Undefined offset

Blade_Storm,
foreach es eficiente, porque ni comprueba que el índice exista, ni calcula el largo: lo que hace es mover el puntero interno del vector.
Lo "malo" es que estás obligado a generar una variable para cada paso.

Pero bueno, podés saber de forma relativamente sencilla cuál es más rápido: en tu programa poné algo como

Código PHP:
$i 0;
$tiempo_inicio microtime();
while (++
1000) {
   
// código de cada opción
}
echo 
"la opción X demoró ", (microtime() - $tiempo_inicio), "milisegundos."
Lo de las mil veces es para obtener un "promedio". Luego podés dividir el resultado entre mil, si te parece más útil.


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 07:13.