2015-07-21 39 views
0

我有我的「/模板」文件夾中的以下文件和文件夾:PHP SCANDIR排序第一單文件,那麼文件夾和子文件夾

/templates/folder/contact.html 
/templates/folder/index.html 
/templates/folder/search.html 
/templates/index.html 
/templates/music.html 
/templates/path/index.html 
/templates/path/test.html 
/templates/video.html 

現在我想要得到的名單第一排序的單個文件,
然後將文件夾和子文件夾,我的意思是:

/index.html 
/music.html 
/video.html 
/folder/contact.html 
/folder/index.html 
/folder/search.html 
/path/index.html 
/path/test.html 

,我使用這個代碼,但我無法弄清楚如何將它們的順序進行排序。請幫助

<?php 

function listFolderFiles($dir, $parent = ''){ 
    $ffs = scandir($dir); 
    echo '<ol style="padding:0;">'; 
    foreach($ffs as $ff){ 
     if($ff != '.' && $ff != '..'){ 
      echo '<li>'.$parent.'/'.$ff; 
      if(is_dir($dir.'/'.$ff)){ 
       listFolderFiles($dir.'/'.$ff, $ff); 
      } 
      echo '</li>'; 
     } 
    } 
    echo '</ol>'; 
} 

listFolderFiles('templates'); 

?> 

請注意:實際上這個代碼也是一次輸出子文件夾爲「空」,例如, /folder
和子文件夾裏面的內容,而最初的斜線:folder/contact.html
,但我需要有一個像最初的斜線:/folder/contact.html
並刪除「空」子文件夾

回答

0

如果您不需要有另一個字母在那裏排序,您可以將目錄(而不是遞歸調用)存儲到數組中,並在函數結束時爲該數組中的所有元素調用listFolderFiles

0

如果你想堅持原來的遞歸方法 - 無文件名排序(如概述了@彼得 - 範科):

function listFolderFiles($dir, $parent = '') 
{ 
    $ffs = scandir($dir); 
    $subfolders = array(); 

    echo '<ol style="padding:0;">'; 
    foreach($ffs as $ff) 
    { 
     if (!is_dir($dir . '/' . $ff)) 
     { 
      echo '<li>'.$parent.'/'.$ff . '</li>'; 
     } 
     else if($ff != '.' && $ff != '..') 
     { 
      $subfolders[$ff] = $dir.'/'.$ff; 
     } 
    } 

    foreach($subfolders as $ff => $subfolderDir) 
    { 
     listFolderFiles($subfolderDir, '/' . $ff); 
    } 

    echo '</ol>'; 
} 
0

下面是一個簡單的遞歸迭代其中一個分裂的每個項目:文件夾Files:

$MójFolder = __DIR__; 
$Pliki = array('Pliki'=>array(), 'Foldery'=>array()); 
$Foldery = []; 

$SkanerKatalogówIPlików = new RecursiveDirectoryIterator($MójFolder, RecursiveDirectoryIterator::SKIP_DOTS); 
$SkanujWszystkiePodkatalogi = new RecursiveIteratorIterator($SkanerKatalogówIPlików, RecursiveIteratorIterator::SELF_FIRST); 

foreach($SkanujWszystkiePodkatalogi as $WszystkiePlikiIFoldery){ 
$Ścieżka = str_replace($MójFolder, '', $WszystkiePlikiIFoldery); 

if($WszystkiePlikiIFoldery->isDir()){ 
    $Pliki['Foldery'][] = '.' . $Ścieżka .'/'; 
    natcasesort($Pliki['Foldery']); 
}elseif($WszystkiePlikiIFoldery->isFile()){ 
    $Pliki['Pliki'][] = $Ścieżka ; 
} 
} 
相關問題