2010-11-17 5 views
5
anzeigen

Ich versuche, eine Liste mit Ordnern und Unterordnern zu erhalten Ich habe die folgenden, die mir erlaubt, die Ordner und Unterordner zu bekommen, aber ich brauchte es sortiert wie die zB unten habe ich versucht, aber ich weiß nicht, wie ich herumkommen würde.wie Ordner und Unterordner von Verzeichnis in PHP

Root/ 
Root/Images 
Root/Images/UserImages 

Root/Text/ 
Root/Text/User1/ 
Root/Text/User1/Folder2 

aber am monent seine Anzeige wie diese

Root/css/ 
tree/css/ 
js/ 
images/ 

PHP CODE:

function ListFolder($path) 
{ 

    $dir_handle = @opendir($path) or die("Unable to open $path"); 

    //Leave only the lastest folder name 
    $dirname = end(explode("/", $path)); 

    //display the target folder. 
    echo ("$dirname/"); 
    while (false !== ($file = readdir($dir_handle))) 
    { 
     if($file!="." && $file!="..") 
     { 
      if (is_dir($path."/".$file)) 
      { 
       //Display a list of sub folders. 
       ListFolder($path."/".$file); 
       echo "<br>"; 
      } 
     } 
    } 


    //closing the directory 
    closedir($dir_handle); 
} 

    ListFolder("../"); 

Danke

+1

möglich Duplikat von mindestens [PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator den vollständigen Baum Abrufen] (http: //stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriterator-retrieving-the-full) – Gordon

Antwort

3

die Verzeichnisnamen in einem Array sammeln statt echo sie direkt ansprechen. Verwenden Sie sort auf dem Array und foreach -loop, um die Liste zu drucken.

Also statt echo ("$dirname/"); würden Sie $dirnames[] = $dirname; verwenden (make $ dirnames global und initialisieren Sie es vor Ihrem ersten Aufruf von "ListFolder"). Dann, nach dem rekursiven Laufe von „ListFolder“, dann würden Sie ausführen sort($dirnames); und dann so etwas wie dies für die Ausgabe:

foreach ($dirnames as $dirname) 
{ 
    echo $dirname . '<br />'; 
} 
1

Sie können achive was Sie mit dem DirectoryIterator wollen oder besser die RecursiveDirectoryIterator aus dem PHP SPL.

hier ist ein kurzes Beispiel, wie diese nutzen:

$dir = '/path/to/directory'; 
    $result = array(); 

    if (is_dir($dir)) { 
      $iterator = new RecursiveDirectoryIterator($dir); 
      foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {      
       if (!$file->isFile()) { 
        $result[] = 'path: ' . $file->getPath(). ', filename: ' . $file->getFilename(); 
       } 
      } 

    } 

Diese den Trick tun soll. Viel Glück;)

+0

Es wäre (wahrscheinlich) vorzuziehen, 'is_dir()' zu überspringen und die von 'RecursiveDirectoryIterator' geworfene' UnexpectedValueException' zu fangen wenn '$ dir 'kein Verzeichnis ist; Letzteres wird trotzdem nach dem Verzeichnis suchen. Sie können die Iteratoren auch in einen 'ParentIterator' einfügen, um nur Verzeichnisse aufzulisten, und auf die 'isFile()' Bedingung verzichten. – salathe

+0

ja, du hast Recht, ich könnte und sollte das tun, aber hier habe ich nur versucht, ihm ein schnelles Beispiel zu zeigen. Vielen Dank! – misterjinx

1

mit diesem Code erhalten Sie Listen mit Unterverzeichnisse (aber stellen Sie Ihren folder)

<?php 
$path = realpath('yourfolder/examplefolder'); 
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) 
{ 
     echo "$filename\n"; 
} 
?>