Php RecursiveDirectoryIterator以回送由文件夹分隔的列表

Php RecursiveDirectoryIterator以回送由文件夹分隔的列表,php,recursion,echo,Php,Recursion,Echo,RecursiveDirectoryIterator是否有任何方法可以根据文件夹单独而不是全部回显子文件夹中的文件 这是我的例子。我有一个文件夹(事件),它有多个子文件夹(徽标、人物、乐队)。但子文件夹名称因某些事件而异,所以我不能简单地设置为查看这三个事件,我需要一个“通配符”选项。 当我使用RecursiveDirectoryIterator从这些文件夹中回显所有图像时,它可以工作,但我想根据子文件夹将这些图像分开,这样它会从下面回显文件夹名称和所有图像,然后重复下一个文件夹,依此类推 现在

RecursiveDirectoryIterator是否有任何方法可以根据文件夹单独而不是全部回显子文件夹中的文件

这是我的例子。我有一个文件夹(事件),它有多个子文件夹(徽标、人物、乐队)。但子文件夹名称因某些事件而异,所以我不能简单地设置为查看这三个事件,我需要一个“通配符”选项。 当我使用RecursiveDirectoryIterator从这些文件夹中回显所有图像时,它可以工作,但我想根据子文件夹将这些图像分开,这样它会从下面回显文件夹名称和所有图像,然后重复下一个文件夹,依此类推

现在我用这个:

<?php 
$directory = "path/to/mainfolder/";
foreach (new RecursiveIteratorIterator(new 
RecursiveDirectoryIterator($directory,RecursiveDirectoryIterator::SKIP_DOTS)) as $filename)
{
  echo '<img src="'.$filename.'">';
}
?>

那么,我如何使这个回声像:
标志
图像,图像,图像
人们
图像,图像,图像


提前感谢您提供了有用的提示和想法。

对于我来说,当您将对象放入具有描述性名称的变量中,然后在实例化其他类时传递这些变量时,代码更具可读性。我使用over-the只过滤图像文件扩展名(例如,我不想扩展
recursivefilterator()
类)。代码的其余部分是简单的迭代、提取字符串和分页符。
注意:没有错误处理,最好添加一个try/catch来管理异常

<?php
$directory = 'path/to/mainfolder/';

$objRecursiveDirectoryIterator = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS);
$objRecursiveIteratorIterator = new RecursiveIteratorIterator($objRecursiveDirectoryIterator);
// use RegexIterator() to grab only image file extensions
$objRegexIterator = new RegexIterator($objRecursiveIteratorIterator, "~^.+\.(bmp|gif|jpg|jpeg|img)$~i", RecursiveRegexIterator::GET_MATCH);

$lastPath = '';
// iterate through all the results
foreach ($objRegexIterator as $arrMatches) {
    $filename = $arrMatches[0];
    $pos = strrpos($filename, DIRECTORY_SEPARATOR); // find position of last DIRECTORY_SEPARATOR
    $path = substr($filename, 0, $pos); // path is everything before
    $file = substr($filename, $pos + 1); // file is everything after
    $myDir = substr($path, strrpos($path, DIRECTORY_SEPARATOR) + 1); // directory the file sits in
    if ($lastPath !== $path) { // is the path the same as the last
        // display page break and header
        if ($lastPath !== '') {
            echo "<br />\n";
            echo "<br />\n";
        }
        echo $myDir ."<br />\n";
        $lastPath = $path;
    }
    echo $file . " ";
}