Dostępne są różne opcje, których można użyć do sortowania iteratora w taki czy inny sposób. Najlepsza opcja będzie zależeć od tego, w jaki sposób chcesz manipulować zawartością iteratora, co chcesz wydostać z iteratora i ile iteratora naprawdę potrzebujesz/potrzebujesz.
Podejścia różnią się; korzystając z klas takich jak SplHeap
(lub Min
, Max
odmian),(może na takie rzeczy jak rozmiar pliku) lub po prostu owijając swój iterator w coś takiego jak ArrayObject
, który może sortować własną zawartość.
Jako przykład podam przykład SplHeap
. Ponieważ chcesz zorganizować całą zawartość RecursiveDirectoryIterator
alfabetycznie następnie coś jak poniżej mogą być wykorzystane:
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;
}
Kolejność sortowania jest alfabetyczna, mieszanie pliki i foldery:
./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
możliwy duplikat [po użyciu $ files = new DirectoryIterator() w PHP, jak sortujesz elementy?] (Http://stackoverflow.com/questions/1076881/after-using-files-new-directoryiterator-in- php-how-do-you-sort-the-items) –
[salathe/spl-przykłady - Sortowanie Iteratory] (https://github.com/salathe/spl-examples/wiki/Sorting-Iterators) – hakre