varios una subcarpetas sistema recorrer obtener mostrar los listado leer gestion directorios directorio con carpetas carpeta archivos arbol php arrays recursion

una - Arreglo recursivo profundo de la estructura de directorios en PHP



recorrer archivos de una carpeta php (4)

Estoy tratando de poner algunas carpetas en mi disco duro en una matriz.

Por ejemplo, fotos de vacaciones. Digamos que tenemos esta estructura:

  • Serie 1
    • Elemento 1 del conjunto 1
    • Elemento 2 del conjunto 1
    • Artículo ... del set 1
  • Conjunto 2
    • Subconjunto 1 del conjunto 2
      • Elemento 1 del subconjunto 1 del conjunto 2
      • Artículo ... del subconjunto 1 del conjunto 2
    • Subconjunto 2 del conjunto 2
    • Archivo aleatorio, no un directorio.
  • Conjunto 3
  • ...

Quiero tener algo así, como una matriz.
Lo que significa que tengo 1 gran matriz y en esa matriz hay más matrices. Cada conjunto y subconjunto obtiene su propia matriz.

Estoy tratando de hacer que se vea algo como esto:

Array ( [Set 1] => Array([0] => Item 1 of Set 1, [1] => Item 1 of Set 1,...) [Set 2] => Array([Subnet 1] => Array([0] => Item 1 of Subset 1 of Set 2,[1] => ...), [Subnet 2] => Array([0] => ..., ..., ...), ..., [0] => Random File) [set 3] => Array(...) ... )

Encontré esto: http://www.the-art-of-web.com/php/dirlist/

Pero eso no es lo que estoy buscando. He estado entrometiéndome, pero solo me está dando problemas.

Aquí hay un ejemplo, ver la fuente para una resolución mayor (aparentemente sin hacer clic ...).


Basado en el código de respuesta de @ soulmerge . Acabo de eliminar algunas liendres y los comentarios y uso $startpath como mi directorio de inicio. (GRACIAS @soulmerge!)

function dirToArray($dir) { $contents = array(); foreach (scandir($dir) as $node) { if ($node == ''.'' || $node == ''..'') continue; if (is_dir($dir . ''/'' . $node)) { $contents[$node] = dirToArray($dir . ''/'' . $node); } else { $contents[] = $node; } } return $contents; } $r = dirToArray($startpath); print_r($r);


He tenido éxito con el paquete PEAR File_Find, específicamente con el método mapTreeMultiple () . Tu código se convertiría en algo como:

require_once ''File/Find.php''; $fileList = File_Find::mapTreeMultiple($dirPath);

Esto debería devolver una matriz similar a la que está solicitando.


Recomiendo usar DirectoryIterator para construir su matriz

Aquí hay un fragmento que junté muy rápido, pero no tengo un entorno para probarlo actualmente, así que prepárate para depurarlo.

$fileData = fillArrayWithFileNodes( new DirectoryIterator( ''/path/to/root/'' ) ); function fillArrayWithFileNodes( DirectoryIterator $dir ) { $data = array(); foreach ( $dir as $node ) { if ( $node->isDir() && !$node->isDot() ) { $data[$node->getFilename()] = fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) ); } else if ( $node->isFile() ) { $data[] = $node->getFilename(); } } return $data; }


Una implementación simple sin ningún tipo de manejo de errores:

function dirToArray($dir) { $contents = array(); # Foreach node in $dir foreach (scandir($dir) as $node) { # Skip link to current and parent folder if ($node == ''.'') continue; if ($node == ''..'') continue; # Check if it''s a node or a folder if (is_dir($dir . DIRECTORY_SEPARATOR . $node)) { # Add directory recursively, be sure to pass a valid path # to the function, not just the folder''s name $contents[$node] = dirToArray($dir . DIRECTORY_SEPARATOR . $node); } else { # Add node, the keys will be updated automatically $contents[] = $node; } } # done return $contents; }