Viennamade: Mehrdimensionales Array sortieren

Beitrag lesen

Hallo!

foreach ($trans as $val)
  {
    $sortarray[] = $val['osname'];
  }
array_multisort($sortarray,$trans);

OK, die foreach-Schleife erstellt den sortarray in der Reihenfolge wie $trans vorliegt.
Wie es dann array_multisort schafft $trans wie gewünscht zu sortieren ist mir vollkommen schleierhaft.

array_multisort() stellt die Einträge der beiden Arrays sozusagen in einer Tabelle spaltenweise gegenüber und sortiert zeilenweise nach der ersten Spalte - sind dort gleiche Werte vorhanden, greift es zur Sortierung auf die zweite Spalte zurück, also:

$sortarray | $trans

'x8.gif'   | array([PicNr] => 111, [osname] => x8.gif, ...)
'x2.gif'   | array([PicNr] => 8, [osname] => x2.gif, ...)
...

nach der zeilenweisen Sortierung nach der ersten Spalte ist logischerweise auch das array $trans nach deinen Wünschen sortiert, da die erste Spalte genau nur die Werte enthält, die du zur Sortierung heranziehen möchtest.

Danke für Deine beherzte Antwort, dank ihrer habe ich das array_multisort() verstanden.

Dein Vorhaben ist allerdings ein klassischer Fall für usort(), welches auch schneller sein sollte. Genau dieser Fall wird im Beispiel 2 unter http://de2.php.net/manual/de/function.usort.php erklärt.

:-( Also ich habe versucht das Beispiel 2 auf meinen Array umzubauen, war jedoch erfolglos. Vielleicht geht das gar nicht, weil mein Array mehr "Ebenen" hat als von mir anfänglich dargestellt?
Array
{
   [5] => Array
        (
            [PicNr] => 111
            [osname] => x8.gif
            [origname] => button_down.png
            [hoehe] => 400
            [breite] => 600
            ...
            ...
            ...

Beste Grüße
Viennamade