Vinzenz Mai: Dateien nach Dateityp sortieren

Beitrag lesen

Hallo Nick,

Du kannst sie aber ausnutzen :-)
.
.
.

Uff. :O

Verfahren nicht verstanden :-(

So schwer sollte das gar nicht sein. Du kannst jeden meiner Schritte eins-zu-eins in PHP-Code umsetzen. Ich mach' das mal für den Aufbau der von mir vorgeschlagenen Datenstruktur:

<?php  
  [link:http://de3.php.net/manual/en/function.header.php@title=header]("Content-Type: text/plain");  # ich spare mir den [link:http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel@title=Kontextwechsel]  
  # Liste, wie sie scandir() geliefert hat:  
  $liste = array(  
    'bild.jpg',  
    'mehr_musik.mp3',  
    'musik.mp3',  
    'noch_ein_bild.jpg',  
    'textdokument.doc',  
    'text.txt'  
  );  
  
  # Aufbau unserer Datenstruktur  
  # Lege ein leeres Resultatarray an  
  $resultat = array();  
  
  # Für jeden Dateinamen in der Liste der Dateinamen  
  foreach ($liste as $filename) {  
    # Bestimme die Dateiendung des Dateinamens  
    $extension = [link:http://de3.php.net/manual/en/function.pathinfo.php@title=pathinfo]($filename, PATHINFO_EXTENSION);  
  
    # Wenn die Dateiendung noch nicht als Schlüssel im Resultat existiert  
    if (![link:http://de3.php.net/manual/en/function.array-key-exists.php@title=array_key_exists]($extension, $resultat)) {  
      # Dann lege einen Eintrag der Form (Dateiendung => leeres Array) an  
      $resultat[$extension] = array();  
    }  
  
    # Hänge den Dateinamen an das passende [link:http://de3.php.net/manual/en/language.types.array.php@title=Array] an  
    $resultat[$extension][] = $filename;  
  }  
  
  # Schauen wir's uns an:  
  [link:http://de3.php.net/manual/en/function.var-dump.php@title=var_dump]($resultat);  
?>  

Ausgabe:

array(4) {
  ["jpg"]=>
  array(2) {
    [0]=>
    string(8) "bild.jpg"
    [1]=>
    string(17) "noch_ein_bild.jpg"
  }
  ["mp3"]=>
  array(2) {
    [0]=>
    string(14) "mehr_musik.mp3"
    [1]=>
    string(9) "musik.mp3"
  }
  ["doc"]=>
  array(1) {
    [0]=>
    string(16) "textdokument.doc"
  }
  ["txt"]=>
  array(1) {
    [0]=>
    string(8) "text.txt"
  }
}

Also das strukturierte Array - wie von mir beschrieben.

Die Umwandlung kannst Du in eine Funktion packen:

/*  
  array get_filenames_by_extension ( array $input )  
  strukturiert ein Array von Dateinamen in ein assoziatives Array von Arrays,  
  wobei die Dateiendungen der Dateinamen als Schlüssel verwendet werden und  
  die Werte nummerierte Arrays der Dateinamen mit dem gleichen Dateityp sind  
  
  Verwendeter Algorithmus:  
  
  Lege ein leeres Resultatarray an  
  Für jeden Dateinamen in der alphabetisch sortierten Dateinamenliste  
    Bestimme die Dateiendung des Dateinamens  
    Wenn die Dateiendung noch nicht als Schlüssel im Resultatarray existiert  
      Lege einen Eintrag der Form (Dateiendung => leeres Array) an  
    Ende Wenn  
    Hänge den Dateinamen an das passende Array an.  
  Ende Für  
*/  
function get_filenames_by_extension ($input) {  
  $resultat = array();  
  
  foreach ($input as $filename) {  
    $extension = pathinfo($filename, PATHINFO_EXTENSION);  
    if (!array_key_exists($extension, $resultat)) {  
      $resultat[$extension] = array();  
    }  
    $resultat[$extension][] = $filename;  
  }  
  return $resultat;  
}

Nun kannst Du die Ausgabe ebenfalls als Funktion schreiben, die ein solch aufgebautes Array übergeben bekommt und die Ausgabe genauso vornimmt, wie Du das haben willst.

Freundliche Grüße

Vinzenz