【问题标题】:PHP count sub-directory levels in scandir loopPHP在scandir循环中计算子目录级别
【发布时间】:2016-01-31 20:06:23
【问题描述】:

我得到以下代码,它扫描目录并以以下格式输出文件和子文件夹:

file1.php
folder1
   file2.php
   folder2
       file3.php
file4.php

对于我的超链接,我需要参考具有层数的链接。所以例如:file1.php,folder1和file4.php都是1级。file2.php,一个folder2是2级,file3.php是3级。

关于如何使用循环计数器来实现这一点的任何建议?

$directory = $_SERVER["DOCUMENT_ROOT"]."/files/";

function folderFleList($dir, $menu_class){
    $ffs = scandir($dir);
    echo "<ul class=\"".$menu_class."\">\n";
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li class="menu-item"><a href="#" class="menu-link-level-1">'.$ff;
            if(is_dir($dir.'/'.$ff)) folderFleList($dir.'/'.$ff, "menu-sublist");
            echo '</a></li>';
        }
    }
    echo "</ul>\n";
}

folderFleList($directory, "menu-list");

【问题讨论】:

  • 我还不清楚。你想得到什么?

标签: php foreach scandir


【解决方案1】:

只需为您的函数添加一个额外的参数:

function folderFleList($dir, $menu_class, $level = 1){
    $ffs = scandir($dir);
    echo "<ul class=\"".$menu_class."\">\n";
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li class="menu-item">
                     <a href="#" class="menu-link-level-' . $level . '">'.$ff;
            if(is_dir($dir.'/'.$ff))
                folderFleList($dir.'/'.$ff, "menu-sublist", $level+1);
            echo '</a></li>';
        }
    }
    echo "</ul>\n";
}

folderFleList($directory, "menu-list");

【讨论】:

  • 在我目前拥有的href中#但我想用文件名$ff替换它。但是,这仅显示最新级别的文件。例如,它显示 file3.php,但在 file3.php 示例中,它实际上应该是 /folder1/folder2/file3.php。有什么想法我该怎么做?
  • 你有 $dir*。如果您从中删除 *$_SERVER["DOCUMENT_ROOT"] ,我认为您已接近需要在 $ff 前加上前缀的内容。
猜你喜欢
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2023-03-09
相关资源
最近更新 更多