Servus,
ich hab mir eine kleine Klasse geschrieben (PHP4), die einen Verzeichnisbaum rekursiv ausliest und in einem Array speichert.
Das ganze ist schön und gut Ich habe mir jetzt allerdings in den Kopf gesetzt, ob es nicht möglich wäre das Array etwas anders zu gestalten:
Anders ausgegeben so:
Ich hab bisher mit meinen - bescheidenen - PHP-Kenntnissen bisher noch auf keine Lösung gekommen das Array wie oben beschrieben umzugestalten. Probleme bereitet mir vor allem das erstellen des mehrdimensionalen Arrays. Ich muss auch gestehen keinen spezielle Anwendung im Kopf zu haben, denke aber, dass das Array in der gewünschten Form wesentlich flexibler ist. Vor allem interessiert mich im Moment lediglich, wie ich das Array entsprechend umwandeln kann. Ich habe wie gesagt auch schon ein wenig herumexperimentiert, allerdings ohne auf einen grünen Zweig zu kommen. Vielleicht gibt es sogar eine Möglichkeit, die mir das Array in gewünschter Form gleich beim rekursiven Auslesen des Verzeichnisbaum erstellt. Anbei die Klasse
ich hab mir eine kleine Klasse geschrieben (PHP4), die einen Verzeichnisbaum rekursiv ausliest und in einem Array speichert.
PHP:
Array
(
[0] => ./ardner_misc
[1] => ./casetull
[2] => ./drack
[3] => ./drack/laste
[4] => ./drack/tust/schumm
)
PHP:
Array
(
[0] => ./
Array
(
[0] => ardner_misc/
[1] => casetull/
[2] => drack/
Array
(
[0] => laste/
[1] => tuste/
Array
(
[0] => schumm/
)
)
)
)
PHP:
$array[ 0 ] = './';
$array[ 0 ][ 0 ] = 'ardner_misc/';
$array[ 0 ][ 1 ] = 'casetull/';
$array[ 0 ][ 2 ] = 'drack/';
$array[ 0 ][ 2 ][ 0 ] = 'laste/';
$array[ 0 ][ 2 ][ 1 ] = 'tuste/';
$array[ 0 ][ 2 ][ 1 ][ 0 ] = 'schumm/';
Ich hab bisher mit meinen - bescheidenen - PHP-Kenntnissen bisher noch auf keine Lösung gekommen das Array wie oben beschrieben umzugestalten. Probleme bereitet mir vor allem das erstellen des mehrdimensionalen Arrays. Ich muss auch gestehen keinen spezielle Anwendung im Kopf zu haben, denke aber, dass das Array in der gewünschten Form wesentlich flexibler ist. Vor allem interessiert mich im Moment lediglich, wie ich das Array entsprechend umwandeln kann. Ich habe wie gesagt auch schon ein wenig herumexperimentiert, allerdings ohne auf einen grünen Zweig zu kommen. Vielleicht gibt es sogar eine Möglichkeit, die mir das Array in gewünschter Form gleich beim rekursiven Auslesen des Verzeichnisbaum erstellt. Anbei die Klasse
PHP:
class listdir
{
/**
* Variablen
*/
var $_arrDirs;
var $_arrFiles;
var $_root;
/**
* Konstruktor
*/
function listdir( $dirname = null )
{
$this->_arrDirs = array();
$this->_arrFiles = array();
$this->_root = is_dir( $dirname )
? $dirname
: '.';
$this->runDirs( $this->_root );
}
/**
* Methoden
*/
// Dateien und Verzeichnisse einlesen (rekursiv)
function runDirs( $root )
{
$handle_dir = opendir( $root );
while( false !== ( $item = readdir( $handle_dir ) ) )
{
if( $item != '.' && $item != '..' )
{
if( is_dir( $root . '/' . $item ) )
{
$this->_arrDirs[] = $root . '/' . $item;
$this->runDirs( $root . '/' . $item );
}
else
{
$this->_arrFiles[ $root ][] = $item;
}
}
}
closedir( $handle_dir );
clearstatcache();
ksort( $this->_arrDirs );
ksort( $this->_arrFiles );
}
// _root neu setzen und Array mit Verzeichnissen neu erstellen
function setNewRoot( $root )
{
if( is_dir( $root ) )
{
die( '$this->setNewRoot(): Das angegebene Verzeichnis ist nicht vorhanden.' );
}
$this->_root = $root;
$this->_runDirs( $this->_root );
}
// Dirs ausgeben
function printDirs()
{
return $this->_arrDirs;
}
// Files ausgeben
function printFiles()
{
return $this->_arrFiles;
}
}