3

我希望将文件夹中的所有目录和子目录列为无序列表。
在下面找到了正确列表的代码。但我需要两件事的帮助:

<?php
function listFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ul>';
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</li>';
        }
    }
    echo '</ul>';
}

listFolderFiles('../targetfolder');

?>


所有目录名称都应显示为标题,如下所示:

<li> <h2> directory name </h2> <li> 

和子目录名称,如下所示:

<li> <h3> sub directory name </h3> </li>


在目标目录中,有两个主要目录。他们的名字不应出现在列表中——

我对 php 的经验非常有限 :) 任何帮助将不胜感激!

4

3 回答 3

3

试试这个

function listFolderFiles($dir){
  static $level = 0;
  $level++;
  $ffs = scandir($dir);
  echo '<ul>';
  foreach($ffs as $ff){
    if($ff != '.' && $ff != '..'){
      echo '<li>';
      if(is_dir($dir.'/'.$ff)) {
        $h_start = ($level == 1) ? '<h2>' : '<h3>';
        $h_close = ($level == 1) ? '</h2>' : '</h3>';
        echo $h_start.$ff.$h_close;
        listFolderFiles($dir.'/'.$ff);
      } else {
        echo $ff;
      }
      echo '</li>';
    }
  }
  echo '</ul>';
  $level--;
}
于 2012-09-29T10:23:35.810 回答
0
function listFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ul>';
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) {
                echo '<h3>' . $ff . '</h3>';
                listFolderFiles($dir.'/'.$ff);
            }
            echo '</li>';
        }
    }
    echo '</ul>';
}

echo '<h2>folder</h2>';
listFolderFiles('folder');
于 2012-09-29T10:25:43.873 回答
0

这是一个非常简单且可破解的解决方案:

function dir2ul($path,$title,$n){
    if(!is_dir($path))return "<a href=\"$path\">$title</a>";
    $html="";
    foreach(preg_grep('/^([^.])/', scandir($path)) as $file)
        $html.='<li>'.dir2ul($path.'/'.$file,$file,$n+1).'</li>';
    return "<h$n>$title</h$n><ul>$html</ul>";
}
echo dir2ul('page','',1);
于 2014-09-21T18:55:46.587 回答