簡體   English   中英

遞歸打印文件夾中的所有文件和文件夾

[英]Print all files and folders in a folder recursively

我想遞歸列出文件夾中的所有文件和文件夾。 我已經編寫了代碼來獲取輸出,但是無法以適當的嵌套方式顯示。

   <?php


class CheckFolder{

    public function getSubFolders($dir)
    {
        $folders = array();
        $ffs = scandir($dir);
        foreach($ffs as $ff)
        {
            if($ff != '.' && $ff != '..')
            {
                if(is_dir($dir.'/'.$ff))  $folders[] = $ff;
            }
        }
        return $folders;      
    }

    public function getFiles($dir)
    {
        $files = array();
        if(is_dir($dir))
        {
            $ffs = scandir($dir);
            foreach($ffs as $ff)
            {
                if($ff != '.' && $ff != '..')
                {
                    if(!is_dir($dir.'/'.$ff))  $files[] = '<li>'.$ff.'</li>';
                }
            }
        }
        return $files;
    }    

    function listFolderFiles($dir)
    {
        $ffs     = scandir($dir);
        $folders = $this->getSubFolders($dir);
        $files   = $this->getFiles($dir);

        if(strpos($dir, '/') >0)
        {
            $folderName = substr($dir, strrpos($dir, '/') + 1);
        }
        else
        {        
            $folderName =   $dir;
        }
        echo '<ul>';
        echo '<li>'.$folderName.'</li>';
        if(count($files) > 0)
        {   
            echo '<ul>';
            foreach($files as $file)
            {
                // /echo '<li>'.$file.'</li>';
                echo $file;
            }
            echo '</ul>';
        }

        echo '</ul>';

        foreach($folders as $folder)
        {
           // echo '<li>'.$folderName.'</li>';
            $this->listFolderFiles($dir.'/'.$folder); 
        }

    }


}

$dir = 'test';
$folder = new CheckFolder();
$folder->listFolderFiles($dir)

?>

電流輸出 在此處輸入圖片說明

預期:

在此處輸入圖片說明

我不知道您是否查看過並且可能打折了內置的recursiveIteratorrecursiveDirectoryIterator類集?

以下內容並不涉及您所引用的縮進,但它是一種遍歷路徑中所有目錄的好方法(盡管可能不如您自己創建的遞歸函數那么快)。

手冊稀疏,沒有很好的示例恕我直言,但以下內容可能是您感興趣的,尤其是當您可以指定CHILD_FIRST類的CHILD_FIRST

$folder=__DIR__;
foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $folder, RecursiveDirectoryIterator::KEY_AS_PATHNAME ), RecursiveIteratorIterator::CHILD_FIRST ) as $file => $info ) {
    if( $info->isFile() && $info->isReadable() && $info->isWritable() ){
        echo $info->getPathname() .' ' . $info->getFilename().BR;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM