【问题标题】:php recursive - directory names to appear as headingsphp recursive - 目录名称显示为标题
【发布时间】:2012-09-21 00:53:42
【问题描述】:

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

<?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 方面的经验非常有限 :) 任何帮助将不胜感激!

【问题讨论】:

    标签: php recursion directory


    【解决方案1】:

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

    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);
    

    【讨论】:

      【解决方案2】:

      试试这个

      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--;
      }
      

      【讨论】:

      • 谢谢!这很好用。我还需要关于我的问题的第二件事的帮助 - 我需要隐藏目标文件夹中的主文件夹名称。该列表应该只有子目录及其子目录
      • echo $h_start.$ff.$h_close; 放入if ( ... ) 条件中,检查$ff 是否为in_arrayexcluded directories array
      • 应该试一试。如果我需要为另一个级别的子目录添加另一个h标签,我可以添加code $h_start = ($level == 1) ? '&lt;h2&gt;' : '&lt;h3&gt;' : '&lt;h4&gt;'; 这会是正确的写法吗?
      • 那么就用$h_start = "&lt;h".($level+1)."&gt;";
      • 试试$h_start = ($level &lt; 4) ? "&lt;h".($level+1)."&gt;" : "&lt;h4&gt;";
      【解决方案3】:
      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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        相关资源
        最近更新 更多