Archive for the ‘Sortieren’ tag
Ein altes Navigationsmenu sortieren
Ich habe eine kleine Programmieraufgabe für euch.
Ich habe ein altes Projekt, in dem ich folgende Navigationsstruktur in der Datenbank habe:
menuid | parentid | title | level | sortid |
---|---|---|---|---|
1 | 3 | Wurm 1.1 | 2 | 10 |
2 | 6 | Vogel 2.1 | 2 | 30 |
3 | 0 | Tiger 1 | 1 | 10 |
4 | 6 | Hund 2.2 | 2 | 40 |
5 | 3 | Katze 1.2 | 2 | 11 |
6 | 0 | Pferd 2 | 1 | 20 |
7 | 1 | Baer 1.1.1 | 3 | 0 |
8 | 3 | Schwein 1.3 | 2 | 12 |
9 | 4 | Esel 2.2.1 | 3 | 0 |
Nun möchte ich diese Menüpunkte sortiert ausgeben, und zwar in der folgenden Reihenfolge:
Tiger 1 Wurm 1.1 Baer 1.1.1 Katze 1.2 Schwein 1.3 Pferd 2 Vogel 2.1 Hund 2.2 Esel 2.2.1
Die Sortierreihenfolge muss anhand der menuid, parentid, level und sortid berechnet werden. Eine parentid verweist auf den Elternknoten, sprich er ist darunter einzusortieren. Zwei Einträge mit der selben parentid sind nach der Spalte sortid zu sortieren.
Der Wurm ist ein Kindknoten vom Tiger, der Bär ist ein Kindknoten vom Wurm. Die Katze ist auch ein Kindknoten vom Tiger, hat aber die höhere sortid, muss also nach dem Wurm einsortiert werden.
Es ist ein altes Projekt mit dieser Struktur, und die Frage ist wie man das am einfachsten und schnellsten sortiert?
Geht das ganze mit einem SQL-Query? Das wäre natürlich die beste Lösung, aber mir ist kein solcher Query eingefallen der das Problem lösen könnte.
Also muss es in PHP sortiert werden. Ich habe das ganze in ein PHP-Array gepackt und hier für euch zum Spielen bereitgestellt:
Dort könnt ihr an dem Algorithmus arbeiten, sodass aus dem Ursprungs-Array das Ziel-Array wird. Nachdem ihr „eval()“ gedrückt habt könnt ihr einfach die URL hier in die Kommentare packen, nach jedem Druck auf „eval()“ wird das ganze gespeichert und versioniert.
Ich bin gespannt auf eure Lösungen!