2008-10-30 72 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());'));