2008-10-30 86 views
11

有沒有一種簡單的方法來在PHP中對迭代器進行排序(不需要將它全部拉入數組中並對其進行排序)。排序PHP迭代器

我的具體示例是DirectoryIterator,但是對任何迭代器都有一個通用解決方案會很好。

$dir = new DirectoryIterator('.'); 
foreach ($dir as $file) 
    echo $file->getFilename(); 

我希望能夠通過各種標準(文件名,大小等)

回答

4

有沒有辦法做到這一點排序這些。迭代器應該「遍歷」整個列表。您必須對底層列表進行排序以實現所需的行爲。

順便說一句,更完整參考SPL是在這裏: http://www.php.net/~helly/php/ext/spl/

+0

這就是我害怕的 – Greg 2008-10-31 10:58:51

3

你必須使用iterator_to_array減少(),然後uasort()。而且,在我的性能測試中,速度足夠快。

您的具體例子,我知道使用迭代器的最緊湊的方法是如下:

// get (recursively) files matching a pattern, each file as SplFileInfo object 
$matches = new RegexIterator(
       new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator('/path/to/files/') 
       ), 
       '/(\.php|\.ini|\.xml)$/i' 
      ); 
$files = iterator_to_array($matches); 

// sort them by name 
uasort($files, create_function('$a,$b', 'return strnatcasecmp($a->getFilename(), $b->getFilename());'));