Доступно несколько опций, которые вы можете использовать для сортировки итератора тем или иным способом. Лучший вариант будет во многом зависеть от того, как именно вы хотите манипулировать содержимым итератора, что вы хотите получить от итератора и, действительно, сколько или мало того итератора вам действительно нужно / нужно.
Подходы будут отличаться; используя классы типа SplHeap
(или Min
, Max
разновидностей), SplPriorityQueue
(возможно, для таких вещей, как размер файла) или просто оборачивая ваш итератор во что-то вроде ArrayObject
, которое может сортировать свое собственное содержимое. 1008 *
Я буду использовать SplHeap
в качестве примера. Поскольку вы хотите расположить все содержимое RecursiveDirectoryIterator
в алфавитном порядке, можно использовать что-то вроде следующего:
class ExampleSortedIterator extends SplHeap
{
public function __construct(Iterator $iterator)
{
foreach ($iterator as $item) {
$this->insert($item);
}
}
public function compare($b,$a)
{
return strcmp($a->getRealpath(), $b->getRealpath());
}
}
$dit = new RecursiveDirectoryIterator("./path/to/files");
$rit = new RecursiveIteratorIterator($dit);
$sit = new ExampleSortedIterator($rit);
foreach ($sit as $file) {
echo $file->getPathname() . PHP_EOL;
}
Порядок сортировки в алфавитном порядке, смешивание файлов и папок:
./apple
./apple/alpha.txt
./apple/bravo.txt
./apple/charlie.txt
./artichoke.txt
./banana
./banana/aardvark.txt
./banana/bat.txt
./banana/cat.txt
./beans.txt
./carrot.txt
./cherry
./cherry/amy.txt
./cherry/brian.txt
./cherry/charlie.txt
./damson
./damson/xray.txt
./damson/yacht.txt
./damson/zebra.txt
./duck.txt