Foros del Web » Programando para Internet » PHP »

Función recursiva

Estas en el tema de Función recursiva en el foro de PHP en Foros del Web. hola, quiero recorrer una carpeta e ir guardando los archivos q encuentro en un array, pero si en la carpeta hay más subcarpetas, se debe ...
  #1 (permalink)  
Antiguo 28/07/2006, 01:18
Avatar de julianchoss  
Fecha de Ingreso: julio-2006
Ubicación: Armenia
Mensajes: 26
Antigüedad: 18 años, 3 meses
Puntos: 0
Función recursiva

hola, quiero recorrer una carpeta e ir guardando los archivos q encuentro en un array, pero si en la carpeta hay más subcarpetas, se debe ir a recorrer la subcarpeta y agregar al array los archivos encontrados.
Se q para esto necesito una función recursiva y la tengo planteada de esta manera:

class ficheros {

function addFiles($carpeta) {

if($handle = opendir($carpeta))
{
while (false !== ($file = readdir($handle)))
{
if(!is_dir($file)) {
$files[] = $file;
}else{
addFiles($file);
}
}
}

}

ahora, cuando ejecuto el script, me saca un error diciendo q no encuentra la funcion addFiles.
Ahora, si le cambio la llamada recursiva por $this->addFiles($file); nisiquiera carga la pagina, sale un letrero de q se ha perdido la conexión con la página y q no se puede cargar.

No soy muy experto en eso de recursividad, pero si no estoy mal, con solo escribir el nombre del afunción, ya debería funcionar, o no??
De antemano, gracias por cualquier sugerencia.
  #2 (permalink)  
Antiguo 28/07/2006, 02:21
Avatar de julianchoss  
Fecha de Ingreso: julio-2006
Ubicación: Armenia
Mensajes: 26
Antigüedad: 18 años, 3 meses
Puntos: 0
Hola....
Ya lo corregí:
en la linea del else le puse:

elseif($file != "." && $file != ".."){
Y ya va de maravilla.
  #3 (permalink)  
Antiguo 28/07/2006, 02:40
Avatar de julianchoss  
Fecha de Ingreso: julio-2006
Ubicación: Armenia
Mensajes: 26
Antigüedad: 18 años, 3 meses
Puntos: 0
Nooooooo......
no se q hacer...
no funciona como debéria ya q en el array solo almacena los nombres de las carpetas q encuentra, mas no los archivos.
Aun sigue con el mismo error... disq undefinde function: addFiles.
Será acaso por el manejo de clases??
estoy leyendo mal el directorio??
Heeelp
  #4 (permalink)  
Antiguo 28/07/2006, 03:07
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 20 años, 1 mes
Puntos: 2
Mira a ver asi

Código PHP:
<?
function addFiles($carpeta) {

if(
$handle opendir($carpeta))
{
    while (
false !== ($file readdir($handle)))
    {
        if(
$file <> "." and $file <> ".."){
            if(!
is_dir($file)) {
                
$files[] = $file;
            }else{
                
$files[$file][] = addFiles($file);
            }
        }
    }
}
return 
$files;
}
print_r(addFiles("."));
?>
__________________
Una vez un elemental de rayos mató una tribu entera de tritones.

¡¡ El sólo quería darse un baño !!

http://www.frikilandia.com

Neither Fu Nor Fa
  #5 (permalink)  
Antiguo 28/07/2006, 03:26
Avatar de julianchoss  
Fecha de Ingreso: julio-2006
Ubicación: Armenia
Mensajes: 26
Antigüedad: 18 años, 3 meses
Puntos: 0
De acuerdo solo carpetas

Hola.
Probé tal y como dijiste, pero en el array solo me aparecen los nombres de los archivos y carpetas q encuentra en la primera de ellas, pero no busca en las más internas.

Lo corregí asi:
Código:
function addFiles($carpeta) {
  if(is_dir($carpeta)){
    if($handle = opendir($carpeta))
    {
        while (false !== ($file = readdir($handle)))
        {
            if($file <> "." and $file <> ".."){
                if(is_dir($file)) {
                    $files[] = $file;
                }else{
                    $files[$file][] = $this->addFiles($carpeta."/".$file);
                }
            }
        }
    }
  }
  return $files;
}
Y funcionó creo q perfecto.
me imprime algo asi:
Array ( [Aerografia] => Array ( [0] => Array ( [FIL9846.JPG] => Array ( [0] => ) [Thumbs.db] => Array ( [0] => ) [FIL9840.JPG] => Array ( [0] => ) [FIL9841.JPG] => Array ( [0] => ) [FIL9842.JPG] => Array ( [0] => ) [FIL9843.JPG] => Array ( [0] => ) [FIL9844.JPG] => Array ( [0] => ) [FIL9845.JPG] => Array ( [0] => ) [FIL9847.JPG] => Array ( [0] => ) ) ) [Pincel] => Array ( [0] => Array ( [FIL9670.JPG] => Array ( [0] => ) [FIL9672.JPG] => Array ( [0] => ) [Thumbs.db] => Array ( [0] => ) ) ) [A_Mano] => Array ( [0] => Array ( [FIL9849.JPG] => Array ( [0] => ) [FIL9683.JPG] => Array ( [0] => ) [Thumbs.db] => Array ( [0] => ) ) ) [Hola] => Array ( [0] => ) [FIL9847.JPG] => Array ( [0] => ) )

ahora, perdon la ignorancia, como recorro ese array multidimensional??

Última edición por julianchoss; 28/07/2006 a las 03:33
  #6 (permalink)  
Antiguo 28/07/2006, 03:58
Avatar de julianchoss  
Fecha de Ingreso: julio-2006
Ubicación: Armenia
Mensajes: 26
Antigüedad: 18 años, 3 meses
Puntos: 0
Yap..

Por fin me funcionó bien...
con esto:
if(!is_dir($carpeta."/".$file)).....

Gracias por la ayuda...
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:35.