Hallo,
ich verwende die unten aufgeführte Klasse (gefunden bei Benutzerkommentaren in der Online-PHP-Doku), die ich an unsere Bedürfnisse angepasst habe. Leider bekomme ich es nicht hin, (zusätzlich) mehrdimensionale Arrays generieren zu lassen, die die Verzeichnisstruktur "darstellen".
Biespielhafte Verzeichnisstruktur:
Das Array soll dann ungefähr so aussehen:
Ich finde nun keine Logik, mit der ich dieses Array bauen lassen soll, obwohl das Prinzip im Kopf ganz banal erscheint. Das Problem liegt darin, dass man vorher nicht weiß, wie viele Ebenen und Unterebenen usw. das Array haben soll.
Sage ich z. B. $blah[$x]=$aktuelles_verz, müsste ich, sofern dieses Unterverzeichnisse hat, beim nächsten Durchlauf $blah[$x]$[y]=$aktuelles_verz sagen können. Und wenn dieses wieder Unterverzeichnisse hat, $blah[$x][$y][$z]=$aktuelles_verz. Aber wie bringe ich ihm bei, dass er dann immer eine Ebene weiterschaltet? Und v. a. wie schreibe ich das in PHP? Die eckigen Klammern können sich ja nicht alleine basteln.
Ideal wäre, wenn zusätzlich zu jedem Verzeichnis die Anzahl der sich darin befindlichen Dateien im Array abgelegt werden würde. Aber hier hatte ich bisher noch nicht einmal eine sinnvolle Idee, wie das Array strukturiert sein müsste.
Hier mal die Klasse (erweitert, da ich nicht mehr weiß, wo die ursprüngliche genau war):
Ich weiß nicht, ob das eine Kleinigkeit oder doch eine Herausforderung für euch ist. Für mich ist das ein großer Fels
Danke fürs Lesen,
pb
ich verwende die unten aufgeführte Klasse (gefunden bei Benutzerkommentaren in der Online-PHP-Doku), die ich an unsere Bedürfnisse angepasst habe. Leider bekomme ich es nicht hin, (zusätzlich) mehrdimensionale Arrays generieren zu lassen, die die Verzeichnisstruktur "darstellen".
Biespielhafte Verzeichnisstruktur:
Code:
STARTDIR | |-- AAA |-- BBB |-- CCC | | | |-- C1 | |-- C2 |-- DDD | | | |-- D1 | |-- D2 | | | | | |-- D2A | | |-- D2B | | |-- D2C | | | | | | | |-D2C1 | | | |-D2C2
Code:
Array ( [AAA] => DIR [BBB] => DIR [CCC] => Array ( [C1] => DIR [C2] => DIR ) [DDD] => Array ( [D1] => DIR [D2] => Array ( [D2A] => DIR [D2B] => DIR [D2C] => Array ( [D2C1] => DIR [D2C2] => DIR ) ) ) )
Sage ich z. B. $blah[$x]=$aktuelles_verz, müsste ich, sofern dieses Unterverzeichnisse hat, beim nächsten Durchlauf $blah[$x]$[y]=$aktuelles_verz sagen können. Und wenn dieses wieder Unterverzeichnisse hat, $blah[$x][$y][$z]=$aktuelles_verz. Aber wie bringe ich ihm bei, dass er dann immer eine Ebene weiterschaltet? Und v. a. wie schreibe ich das in PHP? Die eckigen Klammern können sich ja nicht alleine basteln.
Ideal wäre, wenn zusätzlich zu jedem Verzeichnis die Anzahl der sich darin befindlichen Dateien im Array abgelegt werden würde. Aber hier hatte ich bisher noch nicht einmal eine sinnvolle Idee, wie das Array strukturiert sein müsste.
Hier mal die Klasse (erweitert, da ich nicht mehr weiß, wo die ursprüngliche genau war):
PHP-Code:
class clVerzDateien {
var $datarray;
var $datoptions;
var $verzarray;
function doThisVerz($dir) {
$olddir=$dir;
$dirList[]=$dir;
while(($currDir=array_pop($dirList))!==NULL) {
$dir=opendir($currDir);
while((false!==($file=readdir($dir)))) {
if ($file=="." || $file=="..") {
continue;
}
$fullName=$currDir.'/'.$file;
if (is_dir($fullName)) {
array_push($dirList,$fullName);
continue;
}
++$cnt;
$this->datarray[str_replace($olddir.'/',"",$currDir)][$cnt]=$file;
}
closedir($dir);
}
natcasesort($this->datarray);
ksort($this->datarray);
return $this->datarray;
}
function doOptions($mark=FALSE,$asfile=FALSE) {
unset($this->datoptions);
$asfile=($asfile) ? 'file;#;' : '';
foreach($this->datarray as $verz=>$werte) {
$this->datoptions.='<optgroup label="'.$verz.'">';
foreach($werte as $datei) {
$selected=($asfile.$verz.'/'.$datei==$mark) ? 'selected' : '';
$this->datoptions.='<option value="'.$asfile.$verz.'/'.$datei.'" '.$selected.'>'.$datei.'</option>';
}
$this->datoptions.='</optgroup>';
}
return $this->datoptions;
}
}
Danke fürs Lesen,
pb
Kommentar