RecursiveDirectoryIterator删除Dot文件夹

Jes*_*zie 5 php

目前我有以下代码,这是我能够在下面的代码中设置标志的最佳方式,所以我可以使用::SKIP_DOTS

码:

  $folder = 'images/banner_img';?>

    <?php foreach( new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder)) as $filename): ?>
      <?php $fileTypes = array("db"); 
            $fileType  = pathinfo($filename,PATHINFO_EXTENSION);

            if(!in_array(strtolower($fileType), $fileTypes)):?>


         <img src="<?php echo $filename; ?>" alt="" title="" data-thumb="<?php echo $filename;?>" />

       <?php endif;?>

    <?php endforeach;?>
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 6

设置RecursiveDirectoryIterator::SKIP_DOTS 作为一个选项(在第二个参数),以new RecursiveDirectoryIterator()应足以与您当前的代码工作.

使用PHP 5.3+,您也可以将RecursiveDirectoryIterator其声明为自己的变量,然后在该变量上调用方法:

$iterator = new RecursiveDirectoryIterator($folder);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
// Still need to pass $iterator to a RecursiveIteratorIterator...
Run Code Online (Sandbox Code Playgroud)

setFlags()FilesystemIterator基类继承的方法.

但是,由于您已经在使用模板格式化foreach: / endforeach;样式,因此在嵌套声明中执行它而不是使用其他变量是有意义的.

<!-- Instead, stick with your current iterator declaration and -->
<!-- add RecursiveDirectoryIterator::SKIP_DOTS as the 2nd param to its constructor -->
<?php foreach( new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS)) as $filename): ?>
<!-------------------------------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -->
Run Code Online (Sandbox Code Playgroud)