Multisort Hashmap

Hi Community,

ich krieg nen Foehn.
Ich finde kein Beispiel, dass auf meinen Hash passt.

folgendes ist gegeben:

$hashmap[‚a‘][21][‚Ich bin eine Tolle beschreibung‘]
$hashmap[‚c‘][2][‚Ich bin eine Tolle beschreibung‘]
$hashmap[‚c‘][4][‚Ich bin eine Tolle beschreibung‘]
$hashmap[‚b‘][21][‚Ich bin eine Tolle beschreibung‘]
$hashmap[‚a‘][21][‚Ich bin eine Tolle beschreibung‘]

es soll einfach nach dem ersten hash sortiert werden.
also alphabetisch von [‚a‘] nach [‚c‘]

ich werde aus array_multisort nicht schlau.

in einer anderen variante moechte ich nach dem zweiten hash
sortieren. also numerisch von [2] bis [21]

wie mache ich das ?

merci

gruss

Pixel

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