Gunther: Über Array iterien und Unterarrays sortieren

Beitrag lesen

Hi!

Oder gibt es vielleicht einen ganz anderen (einfacheren/ besseren) Ansatz?
Das Array bildet eine Verzeichnisstruktur ab, ausgehend von einem bestimmten Ausgangsverzeichnis.

Und wie wird es erzeugt? Da dürfte doch auch schon Rekursion im Spiel sein, oder?

Natürlich ... ;)
Das ist die Funktion, mit der ich das Array erzeuge:

  
function gp_GetFileSystemStructure($dir='', $level=0) {  
  global $conf, $data_old;  
  $base=$conf['datadir'];  
  $dirlist = opendir($base.$dir);  
  while ($file = readdir ($dirlist)) {  
    if(preg_match('/^[\._]/',$file)) continue; //skip hidden files and upper dirs  
    $newpath = $dir.'/'.$file;  
    if (is_dir($base.$newpath)) {  
      $id = cleanID($dir.'/'.$file);  
      $pagetitle = $file;  
      if($conf['navmenu']['removesepchar']) $pagetitle = str_replace($conf['sepchar'], " ", $pagetitle);  
      if($conf['navmenu']['firstlettertoupper']) $pagetitle = ucwords($pagetitle);  
      $metatitle = p_get_metadata($id.':'.$conf['navmenu']['namespaceindex'], 'title');  
      if($conf['navmenu']['menutitle'] && $data_old[$id]['sort']) $sortvalue = $data_old[$id]['sort'];  
      else {  
        if($conf['useheading'] && $metatitle) $sortvalue = $metatitle;  
        else $sortvalue = $pagetitle;  
      }  
      $rawdata[] = array(  
      'id'=>$id,  
      'level'=>$level,  
      'filetype'=>'d',  
      'name'=>$file,  
      'title'=>array($pagetitle, $metatitle, $data_old[$id]['title'][2]),  
      'sort'=>$sortvalue,  
      'descendants'=>gp_GetFileSystemStructure($newpath, $level+1),  
      );  
    }  
    else {  
      if(substr($file, -4) == '.txt') {  
        $id = substr(cleanID($dir.'/'.$file), 0, -4);  
        $pagename = substr($file, 0, -4);  
        $pagetitle = $pagename;  
        if($conf['navmenu']['removesepchar']) $pagetitle = str_replace($conf['sepchar'], " ", $pagetitle);  
        if($conf['navmenu']['firstlettertoupper']) $pagetitle = ucwords($pagetitle);  
        $metatitle = p_get_metadata($id, 'title');  
        if($conf['navmenu']['menutitle'] && $data_old[$id]['sort']) $sortvalue = $data_old[$id]['sort'];  
        else {  
          if($conf['useheading'] && $metatitle) $sortvalue = $metatitle;  
          else $sortvalue = $pagetitle;  
        }  
        $rawdata[] = array(  
        'id'=>$id,  
        'level'=>$level,  
        'filetype'=>'f',  
        'name'=>$pagename,  
        'title'=>array($pagetitle, $metatitle, $data_old[$id]['title'][2]),  
        'sort'=>$sortvalue,  
        );  
      }  
    }  
  }  
  closedir($dirlist);  
  return $rawdata;  
}  

Warum wird es dann nicht eigentlich schon beim Erzeugen sortiert?

Ja gute Idee. Und wo müsste ich dann da einhaken, um es zu sortieren?
Dein Vorschlag wirft bei mir die Frage auf, wie ich etwas in Abhängigkeit voneinander sortieren soll, bevor alle Elemente vorhanden sind? Und das ist ja erst der Fall, wenn die Funktion vollständig durchlaufen wurde, oder?

gruß,
wahsaga

Gruß Gunther