Php 使用RecursiveDirectoryIterator的文件夹/子文件夹列表

Php 使用RecursiveDirectoryIterator的文件夹/子文件夹列表,php,Php,我正在使用此代码获取曲目的每个文件夹/子文件夹的列表: $path = realpath($userdir); foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) { echo "$filename\n"; } 但是,它会显示如下内容,即添加点或双点,并显示文件夹两次: C:\wamp\www\gg\ftp\repository\user\mist

我正在使用此代码获取曲目的每个文件夹/子文件夹的列表:

$path = realpath($userdir);
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
{
        echo "$filename\n";
}
但是,它会显示如下内容,即添加点或双点,并显示文件夹两次:

C:\wamp\www\gg\ftp\repository\user\mister

C:\wamp\www\gg\ftp\repository\user\mister

C:\wamp\www\gg\ftp\repository\user\mister\apatik

C:\wamp\www\gg\ftp\repository\user\mister\apatik

C:\wamp\www\gg\ftp\repository\user\mister\vvxcv

C:\wamp\www\gg\ftp\repository\user\mister\vvxcv

C:\wamp\www\gg\ftp\repository\user\mister\vvxcv\vcxvcx

C:\wamp\www\gg\ftp\repository\user\mister\vvxcv\vcxvcx

而不是像这样更干净的东西:

C:\wamp\www\gg\ftp\repository\user\mister

C:\wamp\www\gg\ftp\repository\user\mister\apatik

C:\wamp\www\gg\ftp\repository\user\mister\vvxcv

C:\wamp\www\gg\ftp\repository\user\mister\vvxcv\vcxvcx

有办法吗?我以前使用过函数glob

glob($sub . '/*' , GLOB_ONLYDIR);
它正确地显示了文件夹,但我无法使其递归显示子文件夹


谢谢你需要这样的东西

set_time_limit(0);
function scanDirectory($sub = ''){
    $folders = glob($sub . '/*' , GLOB_ONLYDIR);
    foreach($folders as $folder){
        echo "$folder<br />";
        scanDirectory($folder);
    }
}
scanDirectory();
设置时间限制(0);
函数扫描目录($sub=''){
$folders=glob($sub./*',glob_ONLYDIR);
foreach($folders作为$folder){
回显“$folder
”; scanDirectory($文件夹); } } 董事会();
这将列出当前驱动器上的所有文件夹

编辑

$folders=glob($sub./*',glob_ONLYDIR)将获取指定目录中的所有文件夹

foreach($folders as$folder)
将在
文件夹
数组上循环

$sub
将是要浏览的文件夹名称

这些是文件夹

A、B、C

$folders
将有类似的
$folders['A','B','C']


在循环中,每个
ab和C
将作为
$sub
传递,以检查其中是否有更多的
文件夹

我相信
被认为是目录,实际上是父目录。从递归函数中删除名为
的目录。
是的,这也是我的想法,但我的文件夹中没有这样的目录,glob函数没有显示它们。在linux中,它们肯定在那里。在windows命令shell中,您可以通过对父目录执行
cd..
来更改目录!如果($path='.| |$path==''..)返回,则抛出一个
if或类似的东西!您至少需要
一个,因为它是实际目录。如果您想在不带点的情况下显示它,您可以执行一个
rtrim()
。这就完成了任务。谢谢我能问一下这个函数是如何工作的吗?为什么这个时候是scanDirectory,$sub在代码中的角色是什么?(在我的代码中,这个变量与上下文无关,我只是忘记删除它)谢谢,这很有帮助!因此,如果我对这个函数的理解是正确的,那么每当ScandDirectory发现一个新文件夹时,$folder的值就会被新文件夹擦除,对吗?我试图做的是让这个函数将找到的每个$folder与用户所在的当前曲目库进行比较,如果它匹配,它将回显一些html。这可能需要它自己的线程tho。非常感谢你的帮助,真的很有帮助@apatik:是的,它会在每次迭代中更新
$folder
的值