Hallo
Um nach dem ersten Index zu sortieren kannst du einfach ksort nehmen: http://de3.php.net/manual/de/function.ksort.php
Für die weiteren Indizes gibt es keine Sortierfunktion. Einen Ansatz für deine eigne Sortierfunktion findest du in obigem Link im Kommentar ‚serpro at gmail dot com 13-Mar-2009 10:02‘.
Für array_multisort() hat deine Hashmap die falsche Struktur. Bisher hast du:
$map['a'][1]['vier']='Apfel';
$map['a'][3]['eins']='Birne';
$map['b'][1]['eins']='Kiwi';
Du brauchst aber folgende Struktur:
$map['dim1']=array('a','a','b');
$map['dim2']=array( 1 , 3 , 1 );
$map['dim3']=array('vier','eins','eins');
$map['wert']=array('Apfel','Birne','Kiwi');
Umwandeln geht in etwa so:
foreach ($oldmap as $dim1=\>$temp1)
{
foreach ($temp1 as $dim2=\>$temp1)
{
foreach ($temp2 as $dim3=\>$wert)
{
$newmap['dim1'] = $dim1;
$newmap['dim2'] = $dim2;
$newmap['dim3'] = $dim3;
$newmap['wert'] = $wert;
}
}
}
Jetzt schreibst du einfach fürs Sortieren nach dem ersten Index:
array\_multisort($map['dim1'],$map['dim2'],$map['dim3'],$map['wert']);
Dabei wird zuerst nach dim1 sortiert, wenn da zwei gleiche Einträge sind, dann wird dim2 beachtet, wenn da auch wieder gleiche Werte sind, dann wird dim3 ausgewertet und wenn das immer noch keine eindeutige Reihenfolge bringt, dann wird auch wert beachtet.
Wenn du nach dem zweiten Index sortieren willst, dann schreib einfach:
array\_multisort($map['dim2'],$map['dim1'],$map['dim3'],$map['wert']);
oder
array\_multisort($map['dim2'],$map['dim3'],$map['dim1'],$map['wert']);
Je nachdem was genau du haben willst.
sigterm