Rsort und Mehrdimensionale Arrays

Hallo Forum,

habe folgendes array:

$IndexTable[$i] = array(“wert1”, “wert2”, “wert3”, “wert4”);

wie kann ich nun mit rsort alle Werte in “wert4” sortieren?

rsort($IndexTable[3]); funtioniert nicht.

rsort($IndexTable); funktioniert zwar, aber da wird der Wert “wert1” benutzt was mir
nix nützt.

Hat jemand eine Lösung?
mfg.

was genau ist das Problem?

er möchte das Zweidimensionale Array $IndexTable sortieren lassen, und zwar so, dass es den dritten Wert als Sortierkriterium nutzt.

mit rsort nimmt er immer den ersten Wert. Also denke ich wäre die Lösung, einfach den dritten Wert an erste Stelle zu setzen…
ob es noch andere Möglichkeiten gibt weiß ich nicht. Falls also die Reihenfolge der Werte nicht so wichtig ist, würde ich das so machen.

Oder einfach usort nebst simpler selbstgeschriebener Vergleichsfunktion benutzen.

hier mal ein kleiner überblick um was es genau geht:

$IndexTable

Nr.***Name***Differenz***Punkte
**************************
1____Name1___-5_________3
2____Name2___-2_________3
3____Name3____5_________6
4____Name4___-1_________0
5____Name5___10_________6

$IndexTable mit rsort nach Punkte sortiert

Platz*Name***Differenz***Punkte
**************************
1____Name3____5_________6
2____Name5___10_________6
3____Name1___-5_________3
4____Name2___-2_________3
5____Name4___-1_________0

Nun müsste man aber noch die Differenz sortieren, natürlich nur
bei den Plätzen wo die Punktzahl gleich ist.
Am ende müsste die Tabelle so aussehen:

Platz*Name***Differenz***Punkte
**************************
1____Name5___10_________6
2____Name3____5_________6
3____Name2___-2_________3
4____Name1___-5_________3
5____Name4___-1_________0

sollte man gleich alles in usort sortieren?
oder kann man erstmal die Punkte mit rsort sortieren und danach mit
usort die Differenz sortieren?

mfg.

[quote=“ollik”]oder kann man erstmal die Punkte mit rsort sortieren und danach mit
usort die Differenz sortieren?[/quote]
Nee, da wuerde ich schon gleich alles in einem Rutsch mit usort machen - anstatt zwei Sortierungen hintereinander durchzufuehren, das ist bestimmt nicht performanter.

[code]function vergleich($a, $b) {
if($a[3] != $b[3]) return $b[3]-$a[3]; // wenn Punkteanzahl nicht gleich, dann gebe Differenz der ‘Punkte’-Werte zurueck
else return $b[2]-$a[2]; // andernfalls Differenz der ‘Differenz’-Werte
}

usort($deinArray, ‘vergleich’);[/code]

Vielen Dank, das ist die Lösung - perfekt :wink: