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