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 () {
# 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