我的' / templates'中包含以下文件和文件夹。文件夹:
/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');
?>
请注意:实际上这段代码也会输出子文件夹一次&#34;空&#34;,例如/folder
以及没有初始斜杠的子文件夹内的内容:folder/contact.html
但是我需要有一个初始斜杠:/folder/contact.html
并删除&#34;空&#34;子文件夹
答案 0 :(得分:0)
如果您不需要在那里进行另一个字母排序,则可以将目录(而不是递归调用)存储到数组中,并在函数末尾为该数组中的所有元素调用listFolderFiles
。
答案 1 :(得分:0)
如果你想坚持原始的递归方法 - 没有文件名排序(如@ peter-vančo所述):
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>';
}
答案 2 :(得分:0)
这是一个简单的递归迭代器,它将每个项目拆分为:文件夹和文件:
$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 ;
}
}