2010-11-17 8 views
5

Próbuję uzyskać listę z folderami i podfolderami Mam następujące, które pozwala mi uzyskać foldery i podfoldery, ale musiałem go posortować jak Np. poniżej próbowałem, ale nie wiem, jak się obejść.jak wyświetlić foldery i podfoldery z katalogu w PHP

Root/ 
Root/Images 
Root/Images/UserImages 

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

ale na monent jego wyświetlacz jak ten kod

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

PHP:

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("../"); 

dziękuję

+1

możliwy duplikat przynajmniej [PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator zdobycie pełnego drzewa] (http: //stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriterator-retrieving-the-full) – Gordon

Odpowiedz

3

Zebrać nazwy katalogów w tablicy zamiast echo je bezpośrednio. Użyj sort w tablicy i foreach, aby wydrukować listę.

Więc zamiast użyjesz $dirnames[] = $dirname; (utwórz globalne nazwy dirnames i zainicjuj je przed pierwszym wywołaniem "ListFolder"). Następnie po rekurencyjnym biegu „ListFolder”, można wykonać sort($dirnames); a potem coś takiego na wyjściu:

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

można achive co chcesz z DirectoryIterator lub lepsza RecursiveDirectoryIterator z SPL PHP.

o to szybkie przykład jak to wykorzystać:

$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(); 
       } 
      } 

    } 

To powinno załatwić sprawę. Powodzenia;)

+0

Byłoby (prawdopodobnie) lepiej pominąć 'is_dir()' i uchwycić 'UnexpectedValueException' wyrzucony przez' RecursiveDirectoryIterator' jeśli '$ dir' nie jest katalogiem; ten ostatni i tak będzie sprawdzał katalog. Można również owijać iteratory w 'ParentIterator', wyświetlać tylko katalogi i rezygnować z warunku' isFile() '. – salathe

+0

tak, masz rację, mogę i powinienem to zrobić, ale tutaj próbowałem pokazać mu szybki przykład. dzięki! – misterjinx

1

z tego kodu, otrzymasz list z podkatalogów (ale ustawić nazwa_folderu)

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