Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示子文件夹的1个图像_Php - Fatal编程技术网

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>";
}