Array sortieren
Naps
- php
Hi,
gibts eine einfache Möglichkeite dieses Problem zu lösen:
Tabelle:
y1 y2 y3
xxx1 | 32 | 23 | 42
xxx2 | 46 | 4 | 44
xxx3 | 32 | 1 | 2
xxx4 | 1 | 3 | 1
xxx5 | 23 | 23 | 97
Ich würde gerne die Tabelle nach y3 sortieren, falls 2 Einträge gleich sind nach y2, falls wieder gleich nach y1
Die Daten liegen als multidimensionales Array vor.
MfG Naps
Tach!
Ich würde gerne die Tabelle nach y3 sortieren, falls 2 Einträge gleich sind nach y2, falls wieder gleich nach y1
u*sort() mit benutzerdefinierter Vergleichsfunktion.
dedlfix.
Tach!
Ich würde gerne die Tabelle nach y3 sortieren, falls 2 Einträge gleich sind nach y2, falls wieder gleich nach y1
u*sort() mit benutzerdefinierter Vergleichsfunktion.
dedlfix.
Danke ;)
MfG Naps
Tach!
Ich würde gerne die Tabelle nach y3 sortieren, falls 2 Einträge gleich sind nach y2, falls wieder gleich nach y1
u*sort() mit benutzerdefinierter Vergleichsfunktion.
dedlfix.
Danke ;)
MfG Naps
Hi,
ich hab mich jetzt ein bisschen mit usort gespielt, aber es funktioniert noch nicht so ganz:
y1 y2 y3
| 12 | 2 | 12
| 2 | 1 | 12
| 4 | 5 | 43
| 4 | 4 | 4
Danach
y1 y2 y3
| 4 | 5 | 43
| 12| 2 | 12
| 2 | 1 | 12
| 4 | 4 | 4
function cmp($a, $b) {
if($a["y3"] == $b["y3"]) {
if($a["y2"] == $b["y2"]) {
return $a["y1"] + $b["y1"];
} else {
return $a["y2"] + $b["y2"];
}
} else {
return $a["y3"] + $b["y3"];
}
}
Wieso habe ich bei y2 5,2,1,4 und nicht 5,4,2,1 ? Wo liegt mein Fehler?
Danke! MfG Naps
Tach!
Ich würde gerne die Tabelle nach y3 sortieren, falls 2 Einträge gleich sind nach y2, falls wieder gleich nach y1
y1 y2 y3
| 12 | 2 | 12
| 2 | 1 | 12
| 4 | 5 | 43
| 4 | 4 | 4
Danach
y1 y2 y3
| 4 | 5 | 43
| 12| 2 | 12
| 2 | 1 | 12
| 4 | 4 | 4
Wieso habe ich bei y2 5,2,1,4 und nicht 5,4,2,1 ? Wo liegt mein Fehler?
Du hast dann wohl deine Sortierregel nicht passend formuliert. Aber so wie du es da im OP formuliert hast, wird es auch sortiert.
y3: 43 > 12 = 12 > 4
y2: 5 2 > 1 4
y1: 4 12 2 4
Der dritte Datensatz kommt wegen der 43 in y3 zuerst, die 4 im vierten ist die kleinste Zahl, also kommt der am Ende. Die mittleren Plätze werden anhand von y2 ausgehandelt, weil beide 12 sind.
dedlfix.
Der dritte Datensatz kommt wegen der 43 in y3 zuerst, die 4 im vierten ist die kleinste Zahl, also kommt der am Ende. Die mittleren Plätze werden anhand von y2 ausgehandelt, weil beide 12 sind.
Wie kann ich das mit meiner Funktion lösen? Ich komm einfach nicht darauf ...
Tach!
Der dritte Datensatz kommt wegen der 43 in y3 zuerst, die 4 im vierten ist die kleinste Zahl, also kommt der am Ende. Die mittleren Plätze werden anhand von y2 ausgehandelt, weil beide 12 sind.
Wie kann ich das mit meiner Funktion lösen? Ich komm einfach nicht darauf ...
Dann musst du erstmal definieren, was gelöst werden soll. Für mich ist das Ergebnis nicht fehlerhaft, weil ich nur weiß, dass zuerst nach y3, dann y2, dann y1 sortiert werden soll. Ob auf- oder absteigend, hast du noch nicht gesagt. Nur deinem Code entnehme nicht, dass es wohl absteigend sein soll. Passt also alles. Was genau soll den anders sein?
dedlfix.