Foros del Web » Programando para Internet » PHP »

Sacar variables de una función recursiva

Estas en el tema de Sacar variables de una función recursiva en el foro de PHP en Foros del Web. Hola, soy nuevo en el foro, así que perdonan mi inexperiencia. Pero aun soy más inexperto en PHP Tengo el siguiente código: Código PHP: //Verificamos que el directorio mp3's existe: ...
  #1 (permalink)  
Antiguo 15/02/2015, 14:14
Usuario no validado
 
Fecha de Ingreso: junio-2011
Ubicación: Alicante
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Sacar variables de una función recursiva

Hola, soy nuevo en el foro, así que perdonan mi inexperiencia. Pero aun soy más inexperto en PHP

Tengo el siguiente código:

Código PHP:
//Verificamos que el directorio mp3's existe:
file_exists (MP3_DIR) or
    die (
"No se encuentra el directorio mp3's");
//Cambiamos al directoio de mp3's para poder usar los descriptores 
//de archivos de php 'filesize()' etc.
chdir (MP3_DIR) or
    die (
"No se ha seleccionado el directorio de mp3's");

    
$dir MP3_DIR;        
    
function 
lectura($dir)    {

    
//Leemos los archivos del directorio y lo volcamos en la matriz $files.
    
$files scandir ($dir);
    
//Trabajamos ahora con la matriz asociándola.
    
foreach ($files as $song)    {    
        return 
$song;
        
// Buscamos en los subdirectorios    
        
if (is_dir(MP3_DIR $song) && $song !="." && $song !=".." ){ 
               
//solo si el archivo es un directorio, distinto que "." y ".." 
               
$change chdir (MP3_DIR $song)
                       or die (
"No hemos cambiado al directorio $song");
                
$dir getcwd() . "\\"

              
//Ahora llamamos a leer dentro del nuevo directorio.    
              
lectura($dir);

        } 
        
//Desde aquí leemos los directorios dentro del segundo nivel, es decir, los sub directorios.    
        
if (is_dir($song)&& $song !="." && $song !=".." )    {
                
//Si depués de volver a leer encontramos que existen nuevos directorios.
                //Lo volvemos a leer encajando la nueva ruta.        
                
lectura($dir $song);
        }
  } 
}


//aquí llamamos a la función.
$song lectura($dir); 
echo 
$song
Y sólo me imprime el primer valor leído --> "." y quisiera que se pasaran todos los valores para poder filtrarlos.

¿Cómo debo hacer para que la función me devuelva todos los valores leídos?

Muchas Gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 15/02/2015, 19:03
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Sacar variables de una función recursiva

Quieres que la funcion "lectura" devuelva algo, que asignas a $song.
Eso significa que en la funcion "lectura" existe alguna sentencia "return"
Cuando se busca, sólo hay una, que, por donde está puesta, retorna en cuanto comienza el bucle.
No es que necesites que te devuelva todos los valores leidos.Es que sólo lee el primero.
Quita ese return de ahi, que no lo necesitas, e incluye "return" en todas las llamadas recursivas a lectura.
Por otro lado..qué haces si lo que encuentras no es un directorio?
Y, los dos ifs que tienes, ambos intentan meterse en subdirectorios, y ambos creo que son incorrectos.
  #3 (permalink)  
Antiguo 18/02/2015, 02:19
Usuario no validado
 
Fecha de Ingreso: junio-2011
Ubicación: Alicante
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sacar variables de una función recursiva

Hola de nuevo, dashtrash perdón por el retraso en contestar.
Los "if" si entran en los subdirectorios y leen los archivos, por lo menos en las pruebas que he hecho yo.
por otro lado, ¿dónde he de poner el "return" para que me asigne a la variable "$song" cada valor leido?

Muchas gracias otra vez por vuestra ayuda.
  #4 (permalink)  
Antiguo 18/02/2015, 03:58
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: Sacar variables de una función recursiva

Deberías ir guardando los resultados en un array... y luego devuelves ese array ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 19/02/2015, 14:21
Usuario no validado
 
Fecha de Ingreso: junio-2011
Ubicación: Alicante
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sacar variables de una función recursiva

Perdonad mi desconocimiento, pero ¿cómo debería hacerlo?
Muchas gracias otra vez.
  #6 (permalink)  
Antiguo 19/02/2015, 15:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Sacar variables de una función recursiva

Aquí un ejemplo básico de acumulación recursiva:

Código PHP:
Ver original
  1. function re($data) {
  2.   $out = array();
  3.  
  4.   foreach ($data as $node) {
  5.     if (is_array($node)) {
  6.       $args = re($node);
  7.       array_unshift($args, $out);
  8.       call_user_func_array('array_push', $args);
  9.     } else {
  10.       array_push($out, $node);
  11.     }
  12.   }
  13.  
  14.   return $out;
  15. }

Ojalá lo entiendas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 10/03/2015, 12:17
Usuario no validado
 
Fecha de Ingreso: junio-2011
Ubicación: Alicante
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sacar variables de una función recursiva

Hola de nuevo. Llevo días intentándolo, pero no me sale. Consigo que me lea todos los directorios y que los meta en un array, pero ¿Cómo los uno en un sólo array ?

Muchas gracias.
  #8 (permalink)  
Antiguo 10/03/2015, 20:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Sacar variables de una función recursiva

Cita:
Iniciado por xaxu_the_kid Ver Mensaje
Hola de nuevo. Llevo días intentándolo, pero no me sale. Consigo que me lea todos los directorios y que los meta en un array, pero ¿Cómo los uno en un sólo array ?

Muchas gracias.
¿Cómo que cómo?

Pues con un loop, ¿con qué más?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: recursiva, variables
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 11:53.