Foros del Web » Programando para Internet » PHP »

límites de for

Estas en el tema de límites de for en el foro de PHP en Foros del Web. Buenas! Tengo una pequeña consulta: ¿Es posible cambiar dinámicamente los límites de un bucle for?, es decir: Código PHP: for( $i = 0 ; $i ...
  #1 (permalink)  
Antiguo 17/07/2012, 05:11
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
límites de for

Buenas!

Tengo una pequeña consulta: ¿Es posible cambiar dinámicamente los límites de un bucle for?, es decir:

Código PHP:
for($i=0;$i<$j;$i++){
   if(
$condicion == $k){
       
$j++;
   }

yo tengo entendido que sí... de modo que he hecho un bucle que recorre dos arrays: en uno hay ítems independientes, y en el otro hay ítems que dependen de los independientes (o de uno de dentro de la segunda lista).

El algoritmo que he hecho es algo así:

Código PHP:
      for($i=0;$i<count($main);$i++)
            
$curr 0;
            
$pCon 0;
            
$tree = array();
            
$puts = array();
            
$tree[$curr++] = $main[$i]->id;
            
            for(
$j=$curr;$j>=0;$j--){
                for(
$k=0;$k<count($hijo);$k++){
                    for(
$l=0;$l<count($puts);$l++){
                        if(
$hijo[$k]->id == $puts[$l]->id){
                            break 
2;
                        }
                    }
                    
                    if(
$hijo[$k]->father == $tree[$j]){
                        
$puts[$pCon++] = $hijo[$k]->id;                
                        
$tree[$curr++] = $hijo[$k]->id;
                        
$j=$curr;
                        break;
                    }
                }
            }
        } 
Lo que pasa es que se queda colgada la web (tengo la sensación que algo hago mal), supongo que por un bucle infinito o algo asi...

¿Alguna sugerencia?

Gracias!

Última edición por DoHITB; 17/07/2012 a las 05:25
  #2 (permalink)  
Antiguo 17/07/2012, 06:23
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: límites de for

de poder se puede, pero puede (valga la redundancia) que el ciclo nunca termine, por lo que tendrás que depurar muy bien dicho algoritmo.

por otro lado intuyo que lo que tratas de hacer ¿es recorrer un árbol?, ésa no es la forma más adecuada, la forma correcta es usar una función recursiva

de todos modos si el árbol es muy grande, debes de aumentar el tiempo de ejecución de php y a lo sumo la memoria
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 17/07/2012, 06:31
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: límites de for

Sí, se podría decir que es recorrer un árbol... pero tal y como está el desarrollo es complicado hacer una función recursiva (hay muchas cosas que se tendrían que cambiar...)

Lo que pretendo que haga mi algoritmo es algo así como

- Recorre elementos independientes
- Colocas ítem X
- Indicas que es el último nodo
- Recorres nodos (a)
- Recorres dependientes
- Si el ítem está puesto => fuera
- Si el dependiente es hijo del nodo actual => Colocas
Marcas como último nodo
Reset en (a)

El tema de pasarlo a función ya vendrá, ya que de momento estoy remodelando todo por partes...
  #4 (permalink)  
Antiguo 17/07/2012, 06:35
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: límites de for

disculpa, pero la forma más eficiente de recorrer un arbol es una función recursiva, y no tendrías que cambiar mucho, a lo sumo una verificación extra para verificar el último nodo en cuestión, pero es algo fácil de hacer y existen miles de ejemplos en la red para recorrer estructuras de árbol de forma recursiva.

recorrer un árbol con for implica limitar las ramas hasta la cantidad de for anidados, algo que francamente no permite extender el árbol ni manejarlo adecuadamente
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
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 21:54.