RecursiveDirectoryIterator有没有办法根据文件夹分别回显子文件夹中的文件,而不是全部在一起?
这是我的例子。我有一个文件夹(事件),它有多个子文件夹(徽标,人物,乐队)。但是子文件夹的名称因某些事件而异,所以我不能简单地设置这三个内部,我需要一个"通配符"选项。 当我使用RecursiveDirectoryIterator来回显出这些文件夹中的所有图像时,它可以工作,但我想根据子文件夹将它们分开,因此它会回显文件夹名称和下面的所有图像,然后重复下一个文件夹,依此类推。
现在我用它:
<?php
$directory = "path/to/mainfolder/";
foreach (new RecursiveIteratorIterator(new
RecursiveDirectoryIterator($directory,RecursiveDirectoryIterator::SKIP_DOTS)) as $filename)
{
echo '<img src="'.$filename.'">';
}
?>
那么,我怎么做这样的回声:
标志
图像,图像,图像
人们
图像,图像,图像
...
提前感谢任何有用的提示和想法。
答案 0 :(得分:1)
对我来说,当你将对象放入具有描述性名称的变量时,代码更具可读性,然后在实例化其他类时传递它们。我已使用RegexIterator()而不是RecursiveFilterIterator()来过滤图片文件扩展名(例如,我们不想扩展RecursiveFilterIterator()
类)。其余的代码是简单的迭代,提取字符串和分页
注意:没有错误处理,最好添加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 . " ";
}