transversable - Clasificación de Iteradores de PHP
transversable php (3)
No hay manera de hacer eso. Un iterador debe "iterar" a través de la lista. Tienes que ordenar la lista subyacente para lograr el comportamiento necesario.
Por cierto, la referencia más completa al SPL está aquí: http://www.php.net/~helly/php/ext/spl/
¿Existe una manera simple de ordenar un iterador en PHP (sin simplemente poner todo en una matriz y ordenar eso).
El ejemplo específico que tengo es un DirectoryIterator, pero sería bueno tener una solución general para cualquier iterador.
$dir = new DirectoryIterator(''.'');
foreach ($dir as $file)
echo $file->getFilename();
Me gustaría poder ordenarlos por varios criterios (nombre de archivo, tamaño, etc.)
Para los que terminan aquí 5 años después:
Si convierte el iterador en una extensión de ArrayIterator, puede usar
ArrayIterator :: uasort (para ordenar por valor) y ArrayIterator :: uksort (para ordenar por clave)
Tendrá que reducir usando iterator_to_array () y luego uasort (). Y, en mi prueba de rendimiento, lo suficientemente rápido.
Para su ejemplo específico, la forma más compacta que conozco usando iteradores es la siguiente:
// 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());''));