Php 显示子文件夹的1个图像
我想显示多个子文件夹的一个(第一个)图像, 我用它来显示所有子文件夹中的所有文件 其他(更好的)解决方案也非常受欢迎Php 显示子文件夹的1个图像,php,Php,我想显示多个子文件夹的一个(第一个)图像, 我用它来显示所有子文件夹中的所有文件 其他(更好的)解决方案也非常受欢迎 $path = realpath('img/gallery'); $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),RecursiveIteratorIterator::SELF_FIRST); foreach($objects as $name => $obje
$path = realpath('img/gallery');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
$example = '/somestring/';
$trimmed = str_replace("/somestring/", "", $name);
echo "<img src=".$trimmed." /></br>";
//...
}
$path=realpath('img/gallery');
$objects=new recursiveiterator(new recursivedirectoryinterator($path),recursiveiterator::SELF_FIRST);
foreach($name=>$object形式的对象){
$example='/somestring/';
$trimmed=str_replace(“/somestring/”,“”,$name);
回声“”;
//...
}
画廊现在看起来像这样
foreach ($images as $img) { ?>
<ul class="list_4">
<li>
<div class="block_pic">
<?php echo "<img src='$img' alt='whatever' /></br>"; ?>
</div>
</li>
</ul>
<?php }
}
}
?>
foreach($img形式的图像){?>
-
当前html
<ul class="list_4">
<li>
<div class="block_pic">
<?php
echo "<a href=".$trimmed."><img src=".$trimmed." alt=' '></a>";
//echo "<img src=".$trimmed." />";
?>
</div>
</li>
</ul>
-
如果您确定每个子目录只包含JPEG图像,那么您的递归DirectoryIterator
方法是一个很好的开始。我会坚持这一点,但为了跟踪您已经访问过的目录和显示过的图像,请维护一个存储文件名目录部分的数组,您可以容易地从或更简单地从中获得
下面的代码已在我的一个图像文件目录树上测试和使用:
// Array to hold visited directories
// Each iteration will check this array for the
// current directory. If already present, it will be skipped
// and if not, action taken.
$visited_dirs = array();
$i = new RecursiveDirectoryIterator(realpath('img/gallery'), RecursiveDirectoryIterator::SKIP_DOTS);
// Set the SKIP_DOTS flag to avoid '.' and '..'
// This method is available in PHP 5.3+
// $i->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
// Define the recursive iterator
$recursive = new RecursiveIteratorIterator($i);
// Loop over it
foreach ($recursive as $path => $object) {
// Get the directory
$dir = pathinfo($path, PATHINFO_DIRNAME);
// Only do something if this directory hasn't already been visited
if (!in_array($dir, $visited_dirs)) {
// Add to the list of visited dirs so it isn't used again
$visited_dirs[] = $dir;
// Do whatever you need to with the file for output
// String manipulations, etc...
$trimmed = str_replace("/somestring/", "", $path);
echo "<img src=".$trimmed." /></br>";
}
}
如果您愿意,您可以将所有$trimmed
值存储到另一个数组中,而不是直接在循环中回显它们。这将使以后更容易使用它们。我可能会这样做
// Instead of directly echo...
$images[] = $trimmed;
// Later loop them to make use of them in a *different loop*
foreach ($images as $img) {
echo "<img src='$img' alt='whatever' /></br>";
}
//而不是直接回显。。。
$images[]=$trimmed;
//稍后循环它们,以在不同的循环中使用它们*
foreach($img形式的图像){
回声“”;
}
请澄清-您希望递归遍历img/gallery
并显示途中遇到的每个目录中的第一个图像文件吗?这些目录中除了图像文件之外还有其他内容吗?第一个是什么?它们是如何排序的?如果您发布一个包含查看他们的文件,并列出您希望输出的内容(哪些文件)@MichaelBerkowski。这些文件夹只包含JPG,JPG按字母顺序排列,并且都有唯一的名称。文件夹(1)->2012-02-21->IMG_4534.JPG文件夹(2)->2012-10-13闪电节(Hans)->PIC_7112.jpg请始终通过编辑原始问题来添加澄清信息。它在评论线程中很容易丢失。非常感谢,如果我想运行它,我会收到错误语法错误,$visited_dirs=[]上意外的“[”错误;@Niles您必须拥有PHP5.3。要使用数组文字,PHP5.4是必需的。相反,如果使用第二种解决方案,请使用$visited_dirs=array();
和$all_files=array();
。很抱歉,Michael,我的编码不是很好。它仍然不起作用:调用未定义的方法RecursiveDirectoryIterator::setFlags()@这听起来像是在使用PHP5.2,因为setFlags()
是由5.3中的FileSystemEmitter接口定义的。无论如何,解决这个问题的方法是在迭代器的构造函数中设置跳过点的标志。我在上面编辑了它。@Niles如果您的主机只支持PHP5.2,您应该开始考虑迁移到更好的。5.2已经有好几年不受支持了除了缺少在5.3和5.4中引入的许多优秀PHP特性之外,它还非常不安全。
// Instead of directly echo...
$images[] = $trimmed;
// Later loop them to make use of them in a *different loop*
foreach ($images as $img) {
echo "<img src='$img' alt='whatever' /></br>";
}