Hay varias opciones disponibles, que puede usar para ordenar un iterador de una forma u otra. La mejor opción dependerá en gran medida de cómo quiera manipular el contenido del iterador, qué quiere obtener del iterador y, de hecho, qué tanto o tan poco del iterador realmente desea/necesita.
Los enfoques pueden variar; haciendo uso de clases como SplHeap
(o Min
, Max
variedades), SplPriorityQueue
(tal vez para cosas como el tamaño de archivo) o simplemente envolviendo su iterador en algo como ArrayObject
que puede ordenar sus propios contenidos.
Usaré un SplHeap
como ejemplo. Desde desea organizar todo el contenido de la RecursiveDirectoryIterator
alfabéticamente entonces algo parecido a lo siguiente podría ser utilizado:
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;
}
El criterio de ordenación es alfabética, archivos y carpetas de mezcla:
./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
posible duplicado de [después de usar $ files = new DirectoryIterator() en PHP, ¿cómo se ordenan los elementos?] (Http://stackoverflow.com/questions/1076881/after-using-files-new-directoryiterator-in- php-how-do-you-sort-the-items) –
[salathe/spl-examples - Clasificación de Iteradores] (https://github.com/salathe/spl-examples/wiki/Sorting-Iterators) – hakre