以递归方式打印文件夹中的所有文件和文件夹
问题描述:
我想递归地列出文件夹中的所有文件和文件夹。我已经编写了代码来获取输出,但我无法以正确的嵌套方式显示。以递归方式打印文件夹中的所有文件和文件夹
<?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
指定的东西。
$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;
}
}
如果将它作为子文件夹检查,那么再次调用函数,这次将'foreach($ pf as $ f)'“'$ f'”var作为参数传递给它。不要忘记检查里面的foreach文件夹是否有孩子,因为如果不是它的叶子文件夹和新的数组不应该再次开始。 [看看是否有帮助](http://*.com/questions/640931/recursively-counting-files-with-php)。 –