我有一个递归目录迭代器来从目录中选择文件. SKIP_DOTS允许我忽略’.’和’..’元素,但我希望能够忽略’__MACOSX’目录和另一个其他隐藏文件,如’.cache.PHP’
$iterator = new RecursiveDirectoryIterator($directory); $iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS); $all_files = new RecursiveIteratorIterator($iterator);
还有其他答案here和here,但只是想知道是否有更清洁的方式?
我希望PHP Manual – FilesystemIterator SetFlags会有什么东西,但似乎没有.
感谢@sven和PHP Docs:
$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