过滤DirectoryIterator输出中的文件

时间:2011-02-08 09:34:56

标签: php

我正在编写一个获取文件修改次数的脚本,并采用一个可选的arg,如果填充了一个数组,其中包含要检查的文件列表,而不是每个文件。我怎样才能在这样的脚本中获取这些文件的数据:

$filesObject = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));

foreach ($filesObject as $key => $object)
{
    $checkFile = filemtime($object->getPathname());
    $num++;
    $alertFiles[$num] = array('name' => $object->getPathname(),
                              'time' => $checkFile);
}

编辑:此代码位于$ filesArray是可以传递的文件名数组的函数中。

1 个答案:

答案 0 :(得分:2)

您可以将Iterator包装在自定义Filter Iterator中(以促进重用)

class FileFilter extends FilterIterator
{
    protected $_files;

    public function __construct($iterator, array $files)
    {
        $this->_files = $files;
        parent::__construct($iterator);
    }

    public function accept()
    {
         return !in_array($this->current(), $this->_files);
    }
}

如果accept返回FALSE,则迭代中不会考虑当前元素。由于您提供的关于$filesArray内容的信息非常少,因此您可能需要更改accept逻辑以使其适用于您的代码。