Moin!
multisort [kann] nur arrays innerhalb eines arrays sortieren.
Mein Ziel ist [...] array[s] innerhalb [des] Hauptarray[s] [...] zu sortieren [...]Das bekomme ich mit multisort irgendwie auch nicht hin.
Beispiel 3 in der Dokumentation.
Ganz schlechtes Beispiel.
array_multisort() ist geeignet für den Fall, dass man zwei oder mehr Arrays hat, in denen jeweils unter dem gleichen Key unterschiedliche Inhalte stehen, und man nun gern möchte, dass das eine Array sortiert wird und sich alle Werte in den anderen Arrays parallel dazu ebenfalls mitbewegen, so dass die Zuordnung insgesamt erhalten bleibt.
Zu kritisieren ist, dass man in solch einem Fall im Prinzip gar kein array_multisort() benötigt, denn es würde ja vollkommen ausreichen, nur das eine Array so zu sortieren, dass die Key-Zuordnung erhalten bleibt (vor allem relevant bei numerischen Keys, die werden gerne mal neu generiert, bei Null startend) - asort() wäre hierfür die richtige Funktion.
Als Bonus für die Vermeidung von array_multisort() und stattdessen dem Einsatz von asort() erhält man in diesem Szenario die Möglichkeit, mehr als eine Sortierung gleichzeitig nutzen zu können, weil alle voneinander unabhängigen Array-Variablen ja isoliert sortiert werden können, und nur die Erhaltung der Key-Zuordnung zu den Werten dafür sorgt, dass man, wenn man einen Key aus dem einen Array kennt, auch auf alle Werte in den anderen Arrays zugreifen kann.
Beispiel:
$tiere = array('Esel', 'Hahn', 'Katze', 'Hund');
$gewicht = array(100, 2, 5, 15);
// Esel => 100 kg, etc...
asort($tiere); // Nach Tiernamen sortieren
asort($gewicht); // Nach Gewicht sortieren
echo "Tiere nach Alphabet:\n";
foreach ($tiere as $key => $name) {
echo "Der $name wiegt {$gewicht[$key]} Kilo\n";
}
echo "Tiere nach Gewicht:\n";
foreach ($gewicht as $key => $kilo) {
echo "Der {$tiere[$key]} wiegt $kilo Kilo\n";
}
Da man diese - gern auch in einem einzigen Array zusammengefaßte, also $musikanten['tiere'] und $musikanten['gewicht'] - Konstellation aber nicht wirklich häufig antrifft, sondern viel eher innerhalb eines einzelnen Array-Eintrags alle Detail-Angaben findet, so wie es bei Datenbank-Abfragen üblich ist, ist dein Verweis auf array_multisort()-Anwendungsbeispiel 3 zwar in der Sache korrekt, er ignoriert aber, dass dieses Anwendungsbeispiel, um überhaupt array_multisort() nutzen zu können, das Array erst komplett umbauen muss, damit array_multisort() überhaupt funktionieren kann. Alternativ dazu kann man sich ja auch eine Callback-Vergleichs-Funktion schreiben und mit usort() arbeiten.
Es gibt also im Prinzip keinen Grund für die Existenz von array_multisort(), sie ist rein technisch gesehen überflüssig.
- Sven Rautenberg