while transversable objetos lista iteradores php iterator

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.)



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());''));