2011-02-08 73 views
2

我正在處理獲取文件修改時間的腳本,並採用一個可選的arg,如果填充了一個包含要檢查的文件列表的數組,而不是每個文件。我怎麼能去剛開這些文件中的數據,這樣的腳本:DirectoryIterator輸出中的篩選文件輸出

$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是可以通過文件名的數組。

+0

要過濾的文件有哪些標準?代碼中沒有`$ filesArray`。請告訴我們它的外觀。 – Gordon 2011-02-08 09:43:35

回答

2

你可以用你的迭代器在自定義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邏輯以使其適用於您的代碼。