Plusieurs options sont disponibles, que vous pouvez utiliser pour trier un itérateur d'une manière ou d'une autre. La meilleure option dépendra beaucoup de la façon précise dont vous voulez manipuler le contenu de l'itérateur, de ce que vous voulez sortir de l'itérateur et, en fait, de combien ou de peu de l'itérateur vous voulez vraiment avoir.
Les approches peuvent varier; en utilisant des classes comme SplHeap
(ou Min
, Max
variétés), SplPriorityQueue
(peut-être pour des choses comme la taille du fichier) ou juste envelopper votre itérateur dans quelque chose comme ArrayObject
qui peut trier son propre contenu.
Je vais utiliser un SplHeap
comme exemple. Puisque vous voulez organiser par ordre alphabétique le contenu de la RecursiveDirectoryIterator
alors quelque chose comme pourrait être utilisé suivant:
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;
}
L'ordre de tri est alphabétique, le mélange des fichiers et des dossiers:
./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
duplication possible de [après avoir utilisé $ files = new DirectoryIterator() en PHP, comment trier les éléments?] (Http://stackoverflow.com/questions/1076881/after-using-files-new-directoryiterator-in- php-how-do-you-sort-the-items) –
[salathe/spl-examples - Tri des itérateurs] (https://github.com/salathe/spl-examples/wiki/Sorting-Iterators) – hakre