Ordenar arquivos por diretório usando o DirectoryTreeIterator @ do SPL

Encontrei algumas perguntas est eessa questã) relacionados aos iteradores do SPL, mas não tenho certeza se eles são úteis no meu caso, pois estou usando uma extensão de nível bastante alto doRecursiveIteratorIterator; aDirectoryTreeIterator.

alvez alguém possa me mostrar como alterar oDirectoryTreeIterator ou como classificar a matriz retornada por diretório depois de ter sido gerada pelo iterado

Um método de classificar os arquivos corretamente diretamente no servidor Apache também é uma opção para mim, se possível usando.htaccess por exemplo

Este é o código deDirectoryTreeIterator do 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 esclarecer por que estou usando o código acima, é porque ele atende exatamente às minhas necessidades. Eu quero gerar uma árvore de diretórios recursiva prefixada por espaços em branco - o exemplo de código original de Marcus Boerger adiciona alguns elementos ASCI. O problema é que não tenho controle sobre a classificação de arquivos e diretórios, portanto, gostaria que a árvore de diretórios aparecesse assim:

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

Em vez disso, as listagens retornadas pelo iterador não são classificadas e me mostram algo assim:

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

ntão acho que a solução que estou procurando é uma maneira de chamar um método de classificação toda vez que um subdiretório for indexado e adicionado à árvore de diretório

Espero ter deixado um pouco mais claro, pois como orador não-nativo às vezes é difícil colocar pensamentos em frases coerentes (ou mesmo palavras nesse sentido

questionAnswers(2)

yourAnswerToTheQuestion