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