2008-10-30 16 views
11

Gibt es eine einfache Möglichkeit, einen Iterator in PHP zu sortieren (ohne alles in ein Array zu ziehen und zu sortieren). Das spezifische Beispiel, das ich habe, ist ein DirectoryIterator, aber es wäre nett, eine allgemeine Lösung für jeden Iterator zu haben.Sortieren von PHP-Iteratoren

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

Ich mag würde in der Lage sein diese nach verschiedenen Kriterien (Dateiname, Größe, usw.) zu sortieren

Antwort

4

Es gibt keine Möglichkeit, das zu tun. Ein Iterator sollte durch die Liste "iterieren". Sie müssen die zugrunde liegende Liste sortieren, um das erforderliche Verhalten zu erzielen.

By the way, desto vollständiger Bezug auf die SPL ist hier: http://www.php.net/~helly/php/ext/spl/

+0

Das ist, was ich hatte Angst vor – Greg

3

Sie werden iterator_to_array reduzieren müssen() verwenden dann uasort(). Und in meinen Leistungstests ausreichend schnell.

Um Ihr spezifisches Beispiel die kompakteste Weise, die ich Iteratoren weiß mit unter:

// 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());'));