Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Ejecución prolongada y fallida en loop for

Estas en el tema de Ejecución prolongada y fallida en loop for en el foro de PHP en Foros del Web. Hola a todos. Tengo un problema en un método y no encuentro el motivo del error con mi código. Estoy intentando crear a partir de ...
  #1 (permalink)  
Antiguo 12/07/2015, 04:24
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Ejecución prolongada y fallida en loop for

Hola a todos.

Tengo un problema en un método y no encuentro el motivo del error con mi código.

Estoy intentando crear a partir de un string un array.

Este es el ejemplo de string de origen
Código:
page/0/id/7
Lo divido y convierto en un array asociativo para luego convertirlo en un array indexado con la siguiente clase

Código PHP:
Ver original
  1. <?php
  2. namespace core;
  3.  
  4. /*
  5.  
  6.  *  crea una array indexado a partir de un string */
  7. class StringToPath{
  8.    
  9.     /*
  10.  
  11.      * @var string/to/path #string
  12.      * divide un string en un array asociativo     */
  13.     public function explode($param){
  14.         return explode("/", $param);
  15.     }
  16.    
  17.     /*
  18.  
  19.      * @array #int=>#string
  20.      * crea un array indexado a partir de un array asociativo     */
  21.     public function toIndexed($param){
  22.         $a = count($param);
  23.         for($i = 0, $j = 1; $i <= $a, $j <= $a; $i+2, $j+2){
  24.             $key = $param[$i];
  25.             $value = $param[$j]; //linea 25
  26.             $result[$key] = $value;
  27.         }
  28.         return $result;
  29.     }
  30.    
  31.     /*
  32.    
  33.      * @var string/to/path #string
  34.      * devuelve el array indexado     */
  35.     public function convert($param){
  36.         $associative = $this->explode($param);
  37.         return $indexed = $this->toIndexed($associative);
  38.     }
  39. }

Explicación del funcionamiento de la clase
Cita:
La clase recibe un string del tipo /key/value/key/value/key/value/....
en el método convert(), el método convert primero llama al método explode, del cual recibe un array asociativo y ese array asociativo lo envia al método toIndexed() que finalmente devuelve un array indexado con los keys como keys del array y los values como values del array indexado.
El problema lo tengo cuando se ejecuta el método toIndexed(), el error que me muestra PHP es el siguiente

Cita:
Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\blog\core\StringToPath.php on line 25
La linea 25 está indicada en el código.

¿Alguien puede ayudarme, sugerirme, etc.?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 12/07/2015, 06:10
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Ejecución prolongada y fallida en loop for

Encontré el error. No me di cuenta que el incremento final para $i, tiene que ser de la forma

Código PHP:
Ver original
  1. $i+=2

Es ahí donde estaba el problema. Lo que no entiendo es por qué me daba ese problema si es igual de válido sumar $i+2 que $i+=2. No entiendo dónde hace la diferencia el intérprete.

¿Alguien puede explicármelo?
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 12/07/2015, 07:17
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Ejecución prolongada y fallida en loop for

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Lo que no entiendo es por qué me daba ese problema si es igual de válido sumar $i+2 que $i+=2. No entiendo dónde hace la diferencia el intérprete.
Eso que escribes no es lo mismo. Esto si es lo mismo:

Código PHP:
Ver original
  1. $i = $i + 2;
  2. $i += 2;

Al colocar únicamente $i + 2 no estás asignando esa suma a ninguna variable, por lo tanto el valor de $i nunca va a cambiar.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Etiquetas: loop
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 00:22.