【问题标题】:List all sub-directories and files with PHP使用 PHP 列出所有子目录和文件
【发布时间】:2014-09-12 19:37:08
【问题描述】:

我正在尝试构建一个函数,该函数将从 URL 中回显出所有子目录和文件的无序列表。

我知道这里有很多例子,但我正在努力寻找合适的东西。

这是我目前所拥有的:

$dir = "an/example/directory";

echo "<ul id='folderList'>";
$dirArr = dirToArray($dir);
listDir($dirArr);
echo "</ul>";

第一个函数递归搜索文件和文件夹,并将它们排序成一个多维数组:

function dirToArray($dir)
{
    $result = array();
    $cdir = scandir($dir);
    foreach($cdir as $key => $value) {
        if (!in_array($value, array(".", ".."))) {
            if(is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
                $result[$dir . DIRECTORY_SEPARATOR . $value] = $this->dirToArray($dir . DIRECTORY_SEPARATOR . $value);
            } else {
                $result[$dir . DIRECTORY_SEPARATOR . $value] = $dir . DIRECTORY_SEPARATOR . $value;
            }
          }
    }

    return $result;
}

现在这是我遇到问题的部分。第二个函数应该循环遍历多数组并相应地回显其内容。

function listDir($multiArr) 
{
    foreach ($multiArr as $key => $value) {
        if (is_array($value)) {
            echo '<li class="sub-directory"><span>'.basename($key).'</span>';
            echo '<ul>';
            listDir($multiArr[$key]);
            echo '</ul>';
        } else {
            echo '<li class="file"><span>'.basename($value).'</span>';
        }
          echo '</li>';
    }
}

但是,第二个功能似乎没有按预期工作。我不太确定为什么,但似乎无法正确递归循环。

无论如何,这个想法是一旦两个函数运行,输出应该是这样的:

<ul id='folderList'>
    <li class="sub-directory"><span>sub-directory-name</span>
        <ul>
            <li class="file><span>fileName1</span></li>
            <li class="file><span>fileName2</span></li>
        </ul>
    </li>
    <li class="file><span>fileName3</span></li>
</ul>

【问题讨论】:

  • 您的 dirToArray() 函数是否返回正确的数组?
  • 是的。如果它是一个文件,它将输出一个简单的值。如果是目录,则为数组
  • 请更新数组好吗?
  • @user3143218 Scandir 已经返回并且数组和 Vijayaragavendran 创建了一个使用它的函数,只有你可以使用 Vijayaragavendran 的函数我认为你的问题会得到解决

标签: php arrays list


【解决方案1】:

您可以使用 bekow 函数以表格格式列出...

function dirToArray($dir)
        {
            $cdir = scandir($dir);
            echo "<table>";
            foreach ($cdir as $key => $value)
            {
                echo "<tr>";
                if (!in_array($value, array(".")))
                {
                    if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
                    {
                            $path = $dir . DIRECTORY_SEPARATOR . $value;
                            echo "<td><a href='file_name.php?dir=$path' >" . $value . "</a></td>";

                    }
                    else
                    {
                        $path = $dir . DIRECTORY_SEPARATOR . $value;
                        echo "<td></td><td><a>". $value . "</a></td>";
                    }
                }
                echo "</tr>";
            }
            echo "</table>";

        }

dirToArray($dir);

【讨论】:

    【解决方案2】:

    这里是获取主目录和子目录的简单函数

    function listdir($dir){
        $ffs = scandir($dir);
        echo '<ol>';
        foreach($ffs as $ff){
            if($ff != '.' && $ff != '..'){
                echo '<li>'.$ff;
                if(is_dir($dir.'/'.$ff)) listdir($dir.'/'.$ff);
                echo '</li>';
            }
        }
        echo '</ol>';
    }
    
    listdir('Main Dir');
    

    【讨论】:

    • OP注意:这个函数调用自己。这是一个称为递归的原则,一旦您掌握了基础知识,就可以很好地研究它。
    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 2011-10-30
    • 2011-12-24
    • 1970-01-01
    • 2012-11-14
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多