2015-07-21 41 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 ; 
} 
} 
相关问题