Сортировка итераторов PHP

Есть ли простой способ сортировки итератора в PHP (не просто вытащить все это в массив и отсортировать его).

В конкретном примере у меня есть DirectoryIterator, но было бы неплохо иметь общее решение для любого итератора.

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

Я хотел бы иметь возможность сортировать их по различным критериям (имя файла, размер и т.д.)

Ответ 1

Нет никакого способа сделать это. Итератор должен "перебираться" по списку. Вы должны отсортировать базовый список для достижения необходимого поведения.

Кстати, более полная ссылка на SPL находится здесь: http://www.php.net/~helly/php/ext/spl/

Ответ 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());'));