PHP 递归目录迭代器 - 忽略某些文件。

标签 php iterator

我有一个递归目录迭代器来从目录中选择文件。 SKIP_DOTS 允许我忽略 '.'和“..”元素,但我希望也能够忽略“__MACOSX”目录和另一个其他隐藏文件,例如“.cache.php”

$iterator = new RecursiveDirectoryIterator($directory);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$all_files  = new RecursiveIteratorIterator($iterator); 

还有其他答案herehere但只是想知道是否有更清洁的方法?

我希望 PHP Manual - FilesystemIterator SetFlags 中会有一些东西但似乎没有。

最佳答案

感谢@Sven 和 PHP 文档:

$iterator = new RecursiveDirectoryIterator($directory);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);

$filter = new MyRecursiveFilterIterator($iterator);

$all_files  = new RecursiveIteratorIterator($filter,RecursiveIteratorIterator::SELF_FIRST);

然后扩展RecursiveFilterIterator

class MyRecursiveFilterIterator extends RecursiveFilterIterator {

    public static $FILTERS = array(
        '__MACOSX',
    );

    public function accept() {
        return !in_array(
            $this->current()->getFilename(),
            self::$FILTERS,
            true
        );
    }

}

根据评论 In the PHP Manual

关于PHP 递归目录迭代器 - 忽略某些文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270629/

相关文章:

c++ - 如何检查字符串是否包含标点符号c++

php - 为什么我不能用 uwamp 连接到 mysql,

c++ - 在此函数的返回值中使用迭代器的目的是什么?

php - 从包含 CSS 的 PHP/HTML 文件生成 PDF

php - 正则表达式是通用的吗?

c++ - 如何将 `boost::range` 迭代器与标准迭代器一起使用

将 JSON 键值对象转换为查询字符串的 JavaScript 函数

lua - 有没有办法告诉 `next` 从特定键开始?

php - SimpleSamlPhp 安装

php - Yii 中声明的 $content 变量在哪里?