Ordenar archivos por directorio utilizando DirectoryTreeIterator de SPL

Encontré un par de preguntas ést yesta pregunt) relacionado con los iteradores SPL, pero no estoy seguro de si son útiles en mi caso, ya que estoy usando una extensión de alto nivel deRecursiveIteratorIterator; elDirectoryTreeIterator.

Podría alguien tal vez mostrarme cómo alterar laDirectoryTreeIterator o cómo ordenar la matriz devuelta por directorio después de que el iterador la haya generado?

Un método para ordenar los archivos correctamente directamente en el servidor Apache también es una opción para mí, si es posible usando.htaccess por ejemplo

Este es el código deDirectoryTreeIterator del SPL:

/** @file directorytreeiterator.inc
 * @ingroup Examples
 * @brief class DirectoryTreeIterator
 * @author  Marcus Boerger
 * @date    2003 - 2005
 *
 * SPL - Standard PHP Library
 */

/** @ingroup Examples
 * @brief   DirectoryIterator to generate ASCII graphic directory trees
 * @author  Marcus Boerger
 * @version 1.1
 */

class DirectoryTreeIterator extends RecursiveIteratorIterator
{
    /** Construct from a path.
     * @param $path directory to iterate
     */
    function __construct($path) {
        parent::__construct(
            new RecursiveCachingIterator(
                new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_FILENAME
                ), 
                CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD
            ), 
            parent::SELF_FIRST
        );
    }

    /** @return the current element prefixed with ASCII graphics
     */ 
    function current() {
        $tree = '';
        for ($l=0; $l < $this->getDepth(); $l++) {
            $tree .= $this->getSubIterator($l)->hasNext() ? ' ' : ' ';
        }
        return $tree . ($this->getSubIterator($l)->hasNext() ? ' ' : ' ') 
               . $this->getSubIterator($l)->__toString();
    }

    /** Aggregates the inner iterator
     */ 
    function __call($func, $params) {
        return call_user_func_array(array($this->getSubIterator(), $func), $params);;
    }
}

Para aclarar por qué estoy usando el código anterior es porque se ajusta exactamente a mis necesidades. Quiero generar un árbol de directorio recursivo prefijado por espacios en blanco: el ejemplo de código original de Marcus Boerger agrega algunos elementos ASCI. El problema es que no tengo control sobre la clasificación de archivos y directorios, por lo que me gustaría que el árbol de directorios aparezca así:

dir001
  subdir001
    subdir002
      subfile001.jpg
  file001.png
  file002.png
  file003.png
dir002
  apple.txt
  bear.txt
  contact.txt
dir003
[...]

En cambio, los listados devueltos por el iterador no están ordenados y me muestran algo como esto:

dir002
  bear.txt
  apple.txt
  contact.txt
dir001
  subdir001
    subdir002
      subfile001.jpg
  file002.png
  file001.png
  file003.png
dir003
[...]

Así que supongo que la solución que estoy buscando es alguna forma de llamar a un método de clasificación cada vez que se indexa un subdirectorio y se agrega al árbol de directorio

Espero haberlo aclarado un poco, ya que como hablante no nativo a veces es difícil poner pensamientos en oraciones coherentes (o incluso palabras para el caso).

Respuestas a la pregunta(2)

Su respuesta a la pregunta