Tobias Pelster: Array-Struktur vereinfachen

Beitrag lesen

Hallo nochmal!
Ich habe es nun gemacht wie ihr (und fur allem EisFuX) es empfohlen habt. Nach ein paar Anpassungen läuft es nun auch wunderbar. Vielen herzlichen Dank!.

Hier noch mal für Interessierte der Code.
(Und vielleicht findet der eine oder andere ja noch einen Fehler oder hat ne Anregung. Dann nur her damit.:-))

  
/**  
* scanr_dir()  
* Erzeugt rekursiv ein Array mit allen in dem übergebenden  
* Ordner enthaltenden Elementen.  
* Dabei ist jeder Schlüsselname der Dateiname eines Elementes.  
* Ordner haben als Wert den Ordnerinhalt als Array,  
* Dateien haben als Wert die Kennung "file"  
* @param dir_name Pfad zum auslesen  
* @return Array mit dem Ordnerinhalt  
*/  
function scanr_dir( $dir_name ) {  
 // Notfalls den letzen Verzeichnistrenner entfernen  
 // (außer es wurde '/' übergeben)  
 $dir_name = preg_replace( '/[^\A]'.preg_quote('/', '/').'\Z/', '', $dir_name );  
 $dh = @opendir( $dir_name );  
 if( FALSE === $dh ) exit( sprintf( 'Verzeichnis "%s" gibts gar nicht!', $dir_name ) );  
 // einlesen  
 $dir_list = array(); // Falls das Verzeichnis mal leer ist  
 while( $dir_entry = @readdir( $dh ) ) {  
  if( '.' == $dir_entry || '..' == $dir_entry ) continue;  
  if( is_dir( $dir_name.DIRECTORY_SEPARATOR.$dir_entry ) )  
   $dir_list[ $dir_entry ] = array();  
  else  
   $dir_list[ $dir_entry ] = 'file';  
 }  
 //Nach den Namen sortieren  
 ksort( $dir_list );  
  
 foreach( $dir_list as $key => $val ) {  
  // Rekursion:  
  if( is_array( $val ) )  
   $dir_list[ $key ] = scanr_dir( $dir_name.'/'.$key );  
 }  
 return( $dir_list );  
}  
  
/**  
* html_make_dir_list()  
* Erzeugt aus einem Array mit Verzeichnisinformationen  
* rekursiv einen Verzeichnisbaum in Form einer  
* unsortierten Liste.  
* @param dir_list Array mit dem Verzeichnisbaum  
* @param $currPath Hilfsvariable  
* @return HTML-Code eines Verzeichnisbaums  
*/  
function html_make_dir_list( $dir_list, $currPath = '' ) {  
 if ( $currPath == '' ) // Wird Funktion zum 1. Mal aufgerufen: Erzeuge Root-Link  
  $html = '<ul><li><a href="http://...?action=list&path=">'.LANG_DOCROOT.'</a><ul>';  
 else  
  $html = '<ul>';  
 foreach( $dir_list as $key => $val ) { // Pro Array-Eintrag  
  if( is_array( $val ) ) {  
   $html .= sprintf( '<li><a href="http://...?action=list&path=%s">%s</a> %s</li>', ( $currPath.'/'.$key ), $key, html_make_dir_list( $val, $currPath.'/'.$key ) );  
  } else {  
   //$html .= sprintf('<li>%s</li>', $key); // Dateien wollen wir nicht anzeigen  
  }  
 }  
 if ( $currPath == '' )  
  $html .= '</ul></li></ul>';  
 else  
  $html .= '</ul>';  
 if ( $html == '<ul></ul>' )  
  return '';  
 else  
  return $html;  
}  
  
// Aufruf:  
$dirs = scanr_dir( CONFIG_DOCS_PATH );  
$dir2ul = html_make_dir_list( $dirs );  
return $dir2ul;  

Ich mach jetzt Feierabend. Und morgen geht's daran, die Liste mit JavaScript optisch aufzupeppen (Auf- und Zuklappen der Ordner usw.)
Vielen Dank nochmal an alle!
Tobi