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

Kik*_*ksy 6 php iterator

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

$iterator = new RecursiveDirectoryIterator($directory);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$all_files  = new RecursiveIteratorIterator($iterator); 
Run Code Online (Sandbox Code Playgroud)

这里这里还有其他答案,但只是想知道是否有更清洁的方式?

我希望PHP手册中有一些东西- FilesystemIterator SetFlags,但似乎没有.

Kik*_*ksy 10

感谢@Sven和PHP Docs:

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

$filter = new MyRecursiveFilterIterator($iterator);

$all_files  = new RecursiveIteratorIterator($filter,RecursiveIteratorIterator::SELF_FIRST);
Run Code Online (Sandbox Code Playgroud)

然后扩展RecursiveFilterIterator

class MyRecursiveFilterIterator extends RecursiveFilterIterator {

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

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

}
Run Code Online (Sandbox Code Playgroud)

根据PHP手册中的注释