Foros del Web » Programando para Internet » PHP »

Misma función dentro de función

Estas en el tema de Misma función dentro de función en el foro de PHP en Foros del Web. Hola a todos. Iluso de mí suponía que esto iba a funcionar. Se trata de una cosa sencilla. Se manda una consulta a la base ...
  #1 (permalink)  
Antiguo 21/11/2011, 13:57
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Misma función dentro de función

Hola a todos. Iluso de mí suponía que esto iba a funcionar.
Se trata de una cosa sencilla. Se manda una consulta a la base de datos con la fecha, hora y minutos. Si no hay coincidencia se devuelve la hora insertada, si hay coincidencia se suma 1 minuto y se vuelve a comprobar si coincide... pero no va. Alguna ayuda?
Código PHP:
function buscaCoincidencias($fecha,$hora,$minutos){
$buscaHora=mysql_query("SELECT * FROM archivos WHERE fecha='$fecha' AND hora='$hora' AND minutos='$minutos'");
$bus=mysql_fetch_assoc($buscaHora);
    if(
mysql_num_rows($buscaHora)>0){// si hay coincidencias en el inicio busco el id coincidente
        
$minutos++;
        if(
$minutos>=60){
        
$minutos=$minutos-60;
        
$hora++;
        }
        if(
$hora>=24){
        
$hora=$hora-24;
        }
        
buscaCoincidencias($fecha,$hora,$minutos);
    }else{
    return 
$hora.":".$minutos;
    }

  #2 (permalink)  
Antiguo 21/11/2011, 14:03
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Misma función dentro de función

Realmente no le veo ningun error de sintaxis o parecido

cual es el fallo?

te da algun error?

que es lo que no va?

si eres mas puntual es más facil ayudarte :)
  #3 (permalink)  
Antiguo 21/11/2011, 14:09
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Misma función dentro de función

Gracias memoadian. Sólamente me devuelve valores si no hay coincidencia. Si hay coincidencia si que se suma 1 a la variable $minutos, pero la función parece que no se vuelve a ejecutar y devuelve un resultado vacío (no devuelve ni los dos puntos separadores de la hora, de return). :(
  #4 (permalink)  
Antiguo 21/11/2011, 14:36
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Misma función dentro de función

ah ya

en esa funcion si encuentra coincidencias no le estas diciendo que te retorne nada es decir que la funcion se ejecuta hasta que no encuentre coincidencias

y entonces devuelve un valor, mientras siga encontrando se sigue ejecutando.

si la funcion se ejecuta por mucho tiempo podria ser que pase de 30 o 60 seguhndos por lo que devolveria

un error de tiempo de ejecucion, tienes habilitado el reporte de errores?

a lo mejor va por ahi.
  #5 (permalink)  
Antiguo 21/11/2011, 14:49
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Misma función dentro de función

Exacto, esa es la idea... que vuelva a la función hasta que no haya coincidencia.
Los reportes no me dan ningún error y los que no coinciden se muestran rápidamente, así que no se excede el tiempo de ejecución.
Creo que hoy no es mi día... vaya cosas!
Gracias de nuevo
  #6 (permalink)  
Antiguo 21/11/2011, 15:00
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Misma función dentro de función

Para más datos, a esta función se le llama despues desde un bucle, ya que hay que comprobar los 5 minutos siguientes al comienzo de la hora..

Código PHP:
    <?php 
function buscaCoincidencias($fecha,$hora,$minutos){
$buscaHora=mysql_query("SELECT * FROM archivos WHERE fecha='$fecha' AND hora='$hora' AND minutos='$minutos'");
$bus=mysql_fetch_assoc($buscaHora);
    if(
mysql_num_rows($buscaHora)>0){/
        
$minutos++;
        if(
$minutos>59){//si pasa de 59 empieza de 0 
        
$minutos=$minutos-60;
        
$hora++;
        }
        if(
$hora>23){//si pasa de 23 horas empieza de 0
        
$hora=$hora-24;
        }
//return $hora.":".$minutos;// se muestra correctamente si lo descomento
        
buscaCoincidencias($fecha,$hora,$minutos);//se vuelve a ejecutar la función
    
}else{
    return 
$hora."/".$minutos;
    }
}

//llamar funcion    
    
$contador=0;
    for(
$i=0;$i<5;$i++){//siguientes 5 minutos
    
$tiempo=buscaCoincidencias($row['fecha'],$row['hora'],($row['minutos']+$contador));
echo 
$tiempo."</br>";
    
$contador++;
    
?>
Si en esos 5 minutos no coincide ningún resultado,se muestran perfectamente. Si coincide, la función no devuelve nada.
He probado hacer un return justo antes de la función enbebida (marcado en el código) y si que se muestra la hora y minutos sumados correctamente, con lo cual lo que no funciona es la funcion embebida... supongo :(

Etiquetas: embebidas, function, recursiva
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 23:02.