Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Undefined Offset

Estas en el tema de Undefined Offset en el foro de PHP en Foros del Web. Tengo este código @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php function DiasHabiles ( $fecha_inicial , $fecha_final ) { list ( $dia , $mes , $year ...
  #1 (permalink)  
Antiguo 16/12/2015, 17:23
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 6 meses
Puntos: 20
Undefined Offset

Tengo este código

Código PHP:
Ver original
  1. <?php
  2. function DiasHabiles($fecha_inicial,$fecha_final)
  3. {
  4. list($dia,$mes,$year) = explode("-",$fecha_inicial);
  5. $ini = mktime(0, 0, 0, $mes , $dia, $year);
  6. list($diaf,$mesf,$yearf) = explode("-",$fecha_final);
  7. $fin = mktime(0, 0, 0, $mesf , $diaf, $yearf);
  8.  
  9. $r = 1;
  10. while($ini != $fin)
  11. {
  12. $ini = mktime(0, 0, 0, $mes , $dia+$r, $year);
  13. $newArray[]=$ini;  
  14. $r++;
  15. }
  16. return $newArray;
  17. }
  18.  
  19.  
  20. function Evalua($arreglo)
  21. {
  22. $feriados        = array(
  23. '1-1',  //  Año Nuevo (irrenunciable)
  24.  
  25. '10-4',  //  Viernes Santo (feriado religioso)
  26. '11-4',  //  Sábado Santo (feriado religioso)
  27. '1-5',  //  Día Nacional del Trabajo (irrenunciable)
  28. '21-5',  //  Día de las Glorias Navales
  29. '29-6',  //  San Pedro y San Pablo (feriado religioso)
  30. '16-7',  //  Virgen del Carmen (feriado religioso)
  31. '15-8',  //  Asunción de la Virgen (feriado religioso)
  32. '18-9',  //  Día de la Independencia (irrenunciable)
  33. '19-9',  //  Día de las Glorias del Ejército
  34. '12-10',  //  Aniversario del Descubrimiento de América
  35. '31-10',  //  Día Nacional de las Iglesias Evangélicas y Protestantes (feriado religioso)
  36. '1-11',  //  Día de Todos los Santos (feriado religioso)
  37. '8-12',  //  Inmaculada Concepción de la Virgen (feriado religioso)
  38. '13-12',  //  elecciones presidencial y parlamentarias (puede que se traslade al domingo 13)
  39. '25-12',  //  Natividad del Señor (feriado religioso) (irrenunciable)
  40. );
  41.  
  42. $dia_=0;
  43. $j= count($arreglo);
  44.  
  45.  
  46. for($i=0;$i<=$j;$i++)
  47. {
  48. $dia = $arreglo[$i];
  49.  
  50.         $fecha = getdate($dia);
  51.             $feriado = $fecha['mday']."-".$fecha['mon'];
  52.                     if($fecha["wday"]==0 or $fecha["wday"]==6)
  53.                     {
  54.                         $dia_ ++;
  55.                     }
  56.                         elseif(in_array($feriado,$feriados))
  57.                         {    
  58.                             $dia_++;
  59.                         }
  60. }
  61. $rlt = $j - $dia_;
  62. return $rlt;
  63. }
  64.  
  65. $CantidadDiasHabiles = Evalua(DiasHabiles('1-1-2016','31-1-2016'));
  66.  
  67. echo   $CantidadDiasHabiles;
  68.  ?>

y al ejecutarlo me da este Notice

Cita:
Notice: Undefined offset: 30 in C:\wamp\www\consicon\movimientos\habiles.php on line 48
Alguien
__________________
Say no more.......
  #2 (permalink)  
Antiguo 16/12/2015, 17:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Undefined Offset

¿Recuerdas que los arrays comienzan con el índice cero?

Bien, pues entonces debes entender que jamás podrás compara un loop así con <= porque sencillamente $i jamás será igual que el count() del mismo array.

Es decir, si un array tiene 5 elementos el índice 5 jamás existirá pues el primero elemento es 0, luego 1, 2, 3 y 4.

¿Ya entiendes por qué dicho índice no existe?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/12/2015, 17:49
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 6 meses
Puntos: 20
Respuesta: Undefined Offset

Claro te entiendo, sin embargo, ya he definido $i=0; para inicializar el array pero no funciona, alguna idea de como lo puedo solucionar?
__________________
Say no more.......
  #4 (permalink)  
Antiguo 16/12/2015, 19:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Undefined Offset

Cita:
Iniciado por el_cesar Ver Mensaje
Claro te entiendo, sin embargo, ya he definido $i=0; para inicializar el array pero no funciona, alguna idea de como lo puedo solucionar?
Pues no, no entendiste ni una pizca de lo que dije.

No se trata de definir $i=0 sino que tu comparación lógica del for() está mal.

Código PHP:
Ver original
  1. // dado un array cualquiera
  2. $array = ['a', 'b', 'c'];
  3.  
  4. // primero calculamos la longitud del array(3)
  5. $c = count($array);
  6.  
  7. // MAL (así lo haces)
  8. for ($i = 0; $i <= $c; $i++) {
  9.   echo $array[$i]; // 0, 1, 2 ... ERROR (undefined offset 3)
  10. }
  11.  
  12. // básicamente es lo mismo que:
  13. echo $array[0]; // a
  14. echo $array[1]; // b
  15. echo $array[2]; // c
  16. echo $array[3]; // ERROR
  17.  
  18. // BIEN
  19. for ($i = 0; $i < $c; $i++) {
  20.   echo $array[$i]; // 0, 1, 2 ... OK
  21. }

Así pues, $i jamás será igual que $c y ahí está la razón de tu error.

¿Ahora sí ya se entiende o te quedaste igual?

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 16/12/2015, 20:02
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 6 meses
Puntos: 20
Respuesta: Undefined Offset

Gracias pate.. ya lo solucioné, modifiqué el loop y listo

La solución fué cambiar esta linea
Código PHP:
Ver original
  1. for($i=0;$i<=$j;$i++)

Por esta

Código PHP:
Ver original
  1. for($i=0;$i<$j;$i++)
__________________
Say no more.......

Etiquetas: fecha, offset, undefined
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 01:10.