[英]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)
?>
預期:
我不知道您是否查看過並且可能打折了內置的recursiveIterator和recursiveDirectoryIterator類集?
以下內容並不涉及您所引用的縮進,但它是一種遍歷路徑中所有目錄的好方法(盡管可能不如您自己創建的遞歸函數那么快)。
手冊稀疏,沒有很好的示例恕我直言,但以下內容可能是您感興趣的,尤其是當您可以指定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.