Naps: Array sortieren

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

  1. 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.

    1. 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

      1. 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

        1. 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.

          1. 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 ...

            1. 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.