Foros del Web » Programando para Internet » PHP »

Detener un for y reiniciarlo a partir del valor de donde quedo detenido

Estas en el tema de Detener un for y reiniciarlo a partir del valor de donde quedo detenido en el foro de PHP en Foros del Web. Hola, buenas tardes, tal vez mi pregunta sea tonta, y tal vez no existe una forma de resolverlo, pero, si es que si se puede, ...
  #1 (permalink)  
Antiguo 09/11/2012, 13:18
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Pregunta Detener un for y reiniciarlo a partir del valor de donde quedo detenido

Hola, buenas tardes, tal vez mi pregunta sea tonta, y tal vez no existe una forma de resolverlo, pero, si es que si se puede, podrian orientarme para hacerlo?.
Les explico:
lo que intento hacer, es que, por ejemplo un contador se compara con datos de un arreglo, si el contador encuentra un numero diferente a algun dato del arreglo, entonces, imprimira el valor del contador, y si encuentra un dato igual lo que quiero que haga, es que pare ahi, no imprima nada, y luego continue el ciclo for, pero, no quiero que se reinicie el contador, quiero que continue donde se habia quedado, para que siga comparandose con los otros numeros.
Algo como esto:
Código PHP:
       for($k=0;$k<sizeof($otro);$k++){
                    for(
$cont_h2=7;$cont_h2<20;$cont_h2++){
                  
//$cont_h2--;
                
                    
if(($cont_h2!=$otro[$k])){
                        
//$otro=($hour)-1;
                    //AQUI IMPRIME UNA HORA PARA AGENDAR AL CALENDARIO    
                       
$calendar .= '<br/><a class="con_linea1" href="#" onclick="abrir_ventana(\'./genera_cita2.php?a=' $list_day '&amp;b=' $month '&amp;c=' $year '&amp;d=' $fk_folio_paciente  '&amp;e=Colposcopia\',\'citas\',\'580\',\'415\'); return false;"><font style="font-size: 6pt; color:blue">'.$cont_h2.':00</font></a>'
                     
                       
        
                        }
                        else{
//SI ENCUENTRA UN DATO IGUAL
                            
                            
}

        }}} 
Por ejemplo, si son 3 datos en el arreglo, entonces, se compara el contador con el arreglo pero lo hace 3 veces, repitiendo el ciclo:

Cita Col 09:00
Cita Col 11:00
Cita 5a 14:00
7:00
8:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
7:00
8:00
9:00
10:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
15:00
16:00
17:00
18:00
19:00
Me arroja lo anterior, dependiendo de las horas que ya esten agendadas, es decir, Cita Col 09:00,Cita Col 11:00,Cita 5a 14:00, no debe imprimir esas horas, 9 11 y 14, pero si las demas, apartir del 7, 8,10,12,13,15...
Existe alguna forma de lograr esto? Ya investigue, existe el break y continue, pero no hacen continuar el for con el valor en donde se habia quedado.
Espero haberme explicado, gracias
  #2 (permalink)  
Antiguo 09/11/2012, 13:45
 
Fecha de Ingreso: julio-2010
Mensajes: 28
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Detener un for y reiniciarlo a partir del valor de donde quedo detenido

No estoy seguro la verdad no recuerdo si es válido en php, pero para la mayoría de los lenguajes de programación, así como "break" sale del ciclo, "continue" para la iteración actual y pasa directo a la siguiente.

intenta y comentas.
  #3 (permalink)  
Antiguo 09/11/2012, 14:01
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Detener un for y reiniciarlo a partir del valor de donde quedo detenido

Hola, muchas gracias por contestar, intente con el break y continue, ahora me para el ciclo, y ya no cuenta hacia adelante, lo hace hacia atras, imprime los datos que son diferentes del dato del array, pero sigue comparandose todo el contador con los datos del array:

Cita Col 09:00
Cita Col 11:00
Cita 5a 14:00
7:00:00
8:00:00
7:00:00
8:00:00
9:00:00
10:00:00
7:00:00
8:00:00
9:00:00
10:00:00
11:00:00
12:00:00
13:00:00
Ahora hace eso, si miras, si por ejemplo ya esta la hora 9 agendada, entonces solo me imprimió los números antes del 9, eso esta bien, pero ahora se compara la hora 11, y hace lo mismo, imprime los números que están antes del 11, osea 7 8 9 10 y eso esta mal, por que no quiero que se repitan, quiero que quede asi:
Cita Col 09:00
Cita Col 11:00
Cita 5a 14:00
7:00:00
8:00:00
10:00:00
12:00:00
13:00:00
.
.
.
19:00:00
Código PHP:
 for($k=0;$k<sizeof($otro);$k++){
                    for(
$cont_h2=;$cont_h2<20;$cont_h2++){
                  
//$cont_h2--;
                
                    
if(($cont_h2!=$otro[$k])){
                        
//$otro=($hour)-1;
                        
                       
$calendar .= '<br/><a class="con_linea1" href="#" onclick="abrir_ventana(\'./genera_cita2.php?a=' $list_day '&amp;b=' $month '&amp;c=' $year '&amp;d=' $fk_folio_paciente  '&amp;e=Colposcopia\',\'citas\',\'580\',\'415\'); return false;"><font style="font-size: 6pt; color:blue">'.$cont_h2.':00:00</font></a>'
                     
                       
        
                        }
                        else{
//SI ENCUENTRA UN DATO IGUAL
                        
break;
                    
                            }

        }}} 
No se donde poner el continue
  #4 (permalink)  
Antiguo 09/11/2012, 14:34
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: Detener un for y reiniciarlo a partir del valor de donde quedo detenido

La forma más correcta de recorrer un array es con foreach().
Tampoco es aconsejable usar funciones (como sizeof) en el lugar donde estás declarando el bucle, ya que ejecutarás la función en cada ciclo.

No sé exactamente bien lo que quieres hacer, pero creo que te estás complicando un poco.

Te pongo el planteamiento con un "pseudo codigo":

Código PHP:
Ver original
  1. for() {
  2.    if (in_array) {
  3.        no lo incluyes
  4.    }
  5.  
  6.     lo incluyes
  7. }
__________________
Web Designer.
Themes-Up!, próximamente
  #5 (permalink)  
Antiguo 09/11/2012, 15:07
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Detener un for y reiniciarlo a partir del valor de donde quedo detenido

Gracias, el pseudo codigo que escribiste, creo que podria funcionar, lo voy a intentar de esa forma, y lo que estoy intentando hacer, es que, en una tabla tengo citas ya reservadas, entonces hago una consulta para saber cuales horas ya tienen consulta, por eso uso otro for. El resultado de la consulta de aquellas horas que ya tengan cita lo almaceno en un arreglo, entonces, un contador recorre el arreglo de citas, y si encuentra por ejemplo, el contador es 8 y ya hay una cita a las 8, no imprime nada, pero si esta libre ese 8, entonces imprimira la hora 8, para que alguien pueda reservarla, me explico?
Intentare usar lo que me dijiste, gracias
  #6 (permalink)  
Antiguo 09/11/2012, 15:56
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: Detener un for y reiniciarlo a partir del valor de donde quedo detenido

Tal y como veo que has puesto las citas van de hora en hora. Es por ello que este método puede ser efectivo y bastante fácil de realizar, pero si se incluyesen otro tipo de horas, habría que hacer un replanteamiento.

Te pongo el código:

Código PHP:
Ver original
  1. $horaComienzo = 8; // AM
  2.     $horaFinal = 20; // PM
  3.  
  4.     $horas_noDisponible = array (13, 18, 19);
  5.  
  6.     for ($i = $horaComienzo; $i <= $horaFinal; $i++) {
  7.         if (!in_array($i, $horas_noDisponible)) {
  8.             echo $i . ':00 <br />';
  9.         }
  10.     }

No sé cual es el formato de horas que tienes (si no va por números enteros como yo he puesto), no obstante sería fácil adaptarlo a otro tipo de hora.
__________________
Web Designer.
Themes-Up!, próximamente
  #7 (permalink)  
Antiguo 09/11/2012, 16:05
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Detener un for y reiniciarlo a partir del valor de donde quedo detenido

Gracias a todos los que me respondieron, sobre todo a fish_design, use esa funcion, muchisimo mas sencillo, ni siquiera me imagine que se pudiera hacerse algo asi, y es que apenas empece con esto de php, asi arregle el codigo:
Código PHP:
$contA=array();

            for(
$cont2=7;$cont2<19;$cont2++){
            
$contA[]=$cont2;
            }
        while(
$row mysql_fetch_row($rs)) {
        
            
$otro[$cont]=$row[2];
            
$cont++;}
             
                        foreach(
$contA as $valor){
                    if(
in_array($valor$otro) !== false){}
                    
                    else{ 
//SI NO ENCUENTRA UN DATO IGUAL
                        
                         
$calendar .= '<br/><a class="con_linea1" href="#" onclick="abrir_ventana(\'./genera_cita2.php?a=' $list_day '&amp;b=' $month '&amp;c=' $year '&amp;d=' $fk_folio_paciente  '&amp;e=Colposcopia\',\'citas\',\'580\',\'415\'); return false;"><font style="font-size: 6pt; color:blue">'.$valor.':00</font></a>'
                        
                    
                            }

        }} 
Gracias Fish

Etiquetas: break, continue, ciclos
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 17:11.