Wie kommst du an die Variable $filename? Das kann ja eigentlich nur funktionieren, wenn du den Verzeichnisinhalt ausliest, z.B. mit
readdir.
so könntest du z.B. den Array erzeugen:
PHP:
if ($handle = opendir ('/path/to/files'))
{
while (false !== ($file = readdir ($handle)))
{
if ($file && strpos ($file, '.') !== 0))
{
$xml = simplexml_load_file('/path/to/files/'.$file);
foreach ($xml as $xml_erg)
$xmldaten_array[$file] = array ('id' => $xml_erg->id, 'wasichwill' => $xml_erg->wasichwill, etc.);
}
}
closedir ($handle);
}
Wie man
array_multisort anwenden könnte, wäre hier vielleicht etwas zu kompliziert, deshalb ein einfacher Vorschlag:
Du fügst beim erzeugen des Arrays deinen Sortierschlüssel statt $file ein, z.B.:
PHP:
$xmldaten_array[(substr ($xml_erg->wasichwill, 0, 20).'-'.(int)$counter++)] = array (...);
// '-'.(int)$counter++ gewährleistet, dass keys nicht identisch sind)
und sortierst dann den Array mit ksort oder krsort bevor du ihn über "if (count ($xmldaten_array)) foreach " ausgibst.
"substr ($xml_erg->wasichwill, 0, 20)" könnte man bei Bedarf in eine Funktion fassen (make_sortkey()), in der z.B. auch noch Umlaute in ASCII umgewandelt werden oder Sonderzeichen ersetzt werden, je nach Wert, der den Schlüssel erzeugt; hier gehts im Moment nur darum den key in der Länge zu begrenzen.
Und noch eine Überlegung: Wenn du ein MySQL-Datenbank hast, könntest du ja auch die xml-Files in eine Tabelle aufdröseln und von dort sortiert auslesen, denn einen Schwachpunkt hat die beschriebene Vorgehensweise mit Array natürlich - ab einer bestimmten Datenmenge ist Schluss.