使用PHP列出所有子目录和文件

使用PHP列出所有子目录和文件,php,arrays,list,Php,Arrays,List,我正在尝试构造一个函数,该函数将从URL中回显所有子目录和文件的无序列表 我知道这里有很多这样的例子,但我正在努力寻找合适的例子 这就是我到目前为止所做的: $dir = "an/example/directory"; echo "<ul id='folderList'>"; $dirArr = dirToArray($dir); listDir($dirArr); echo "</ul>"; 这是我遇到麻烦的部分。第二个函数应该在多数组中循环,并相应地回显其内容 f

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

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

这就是我到目前为止所做的:

$dir = "an/example/directory";

echo "<ul id='folderList'>";
$dirArr = dirToArray($dir);
listDir($dirArr);
echo "</ul>";
这是我遇到麻烦的部分。第二个函数应该在多数组中循环,并相应地回显其内容

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>';
    }
}
函数listDir($multiArr)
{
foreach($multiArr作为$key=>$value){
if(是_数组($value)){
echo'
  • '.basename($key)。'; 回声“
      ”; listDir($multiArr[$key]); 回声“
    ”; }否则{ echo'
  • '.basename($value)。''; } 回音“
  • ”; } }
    然而,第二个功能似乎并不像预期的那样工作。我真的不知道为什么,但它似乎在正确地递归循环方面有问题

    无论如何,这两个函数运行后,输出应如下所示:

    <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>
    
    
    子目录名
    
    • 文件名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');
    
    函数listdir($dir){ $ffs=斯堪的纳维亚($dir); 回声'; foreach($ffs作为$ff){ 如果($ff!='.&&$ff!='.')){ 回音“
  • ”。$ff; if(is_dir($dir./'.$ff))listdir($dir./'.$ff); 回音“
  • ”; } } 回声'; } listdir(“主目录”);
    您可以使用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);
    
    函数dirToArray($dir)
    {
    $cdir=scandir($dir);
    回声“;
    foreach($cdir作为$key=>$value)
    {
    回声“;
    if(!in_数组($value,数组(“.”))
    {
    if(is_dir($dir.DIRECTORY_SEPARATOR.$value))
    {
    $path=$dir.DIRECTORY\u SEPARATOR.$value;
    回声“;
    }
    其他的
    {
    $path=$dir.DIRECTORY\u SEPARATOR.$value;
    回显“$value.”;
    }
    }
    回声“;
    }
    回声“;
    }
    dirToArray($dir);
    
    您的dirToArray()函数返回的数组是否正确?是的。如果它是一个文件,它将输出一个简单的值。或者一个数组,如果它是一个目录,请你更新数组好吗?@user3143218 Scandir已经返回,数组和Vijayaragavendran使用它创建了一个函数,只有你可以使用Vijayaragavendran的函数,我想你的问题会解决的。注意:这个函数调用自己。这是一个称为递归的原则,一旦掌握了基本知识,就可以很好地研究它。
    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);