Mehrdimensionales Array rekursiv sortieren

chappyberlin

Grünschnabel
Hallo Leute!

Ich bekomme aus einer Datenbank einen Array der "menuindex=>parentindex=>title" aufgebaut ist. Der Array ist bereits per select nach dem "parentindex" sortiert. Jetzt brauche ich eine Möglichkeit, diesen Array rekursiv zu sortieren. Grobgesagt das "Vater zeiger Modell" oder "kleine Baummodell".

Zu jedem "menuindex" folgen die entsprechenden "parentindexwerte".

Google liefert zwar eine Menge zu diesem Thema. Aber leider nichts brauchbares für den reinen Sortiervorgang.

Hat jemand vielleicht einen Tip oder eine Idee? Betrifft wirklich nur den reinen Sortiervorgang. Keine Listen, kein Menü etc. !
 
Mach doch mal ein

PHP:
echo "<pre>"; var_dump($mein_mehrdimensionales_array); echo "</pre>";

Ich kann mir grad nicht so gut vorstellen, was du meinst. Natürlich musst du den Namen der Variable in var_dump() anpassen.
 
Der komplette Array schaut so aus

array(27) {
[0]=>
array(4) {
["menuindex"]=>
string(2) "31"
["parentindex"]=>
string(1) "0"
["title"]=>
string(6) "Action"
["ebene"]=>
string(1) "1"
}
[1]=>
array(4) {
["menuindex"]=>
string(1) "3"
["parentindex"]=>
string(1) "0"
["title"]=>
string(19) "Bekleidung & schuhe"
["ebene"]=>
string(1) "1"
}
[2]=>
array(4) {
["menuindex"]=>
string(1) "8"
["parentindex"]=>
string(1) "0"
["title"]=>
string(14) "Bundfaltenhose"
["ebene"]=>
string(1) "1"
}
[3]=>
array(4) {
["menuindex"]=>
string(2) "22"
["parentindex"]=>
string(1) "0"
["title"]=>
string(13) "Datentransfer"
["ebene"]=>
string(1) "1"
}
[4]=>
array(4) {
["menuindex"]=>
string(1) "7"
["parentindex"]=>
string(1) "0"
["title"]=>
string(9) "Fernseher"
["ebene"]=>
string(1) "1"
}
[5]=>
array(4) {
["menuindex"]=>
string(2) "23"
["parentindex"]=>
string(1) "0"
["title"]=>
string(12) "HiFi Anlagen"
["ebene"]=>
string(1) "1"
}
[6]=>
array(4) {
["menuindex"]=>
string(2) "32"
["parentindex"]=>
string(1) "0"
["title"]=>
string(7) "History"
["ebene"]=>
string(1) "1"
}
[7]=>
array(4) {
["menuindex"]=>
string(2) "29"
["parentindex"]=>
string(1) "0"
["title"]=>
string(12) "Hubschrauber"
["ebene"]=>
string(1) "1"
}
[8]=>
array(4) {
["menuindex"]=>
string(2) "16"
["parentindex"]=>
string(1) "0"
["title"]=>
string(8) "Ökologie"
["ebene"]=>
string(1) "1"
}
[9]=>
array(4) {
["menuindex"]=>
string(2) "24"
["parentindex"]=>
string(1) "0"
["title"]=>
string(10) "Tabakwaren"
["ebene"]=>
string(1) "1"
}
[10]=>
array(4) {
["menuindex"]=>
string(1) "1"
["parentindex"]=>
string(1) "0"
["title"]=>
string(20) "Technik & Multimedia"
["ebene"]=>
string(1) "1"
}
[11]=>
array(4) {
["menuindex"]=>
string(2) "28"
["parentindex"]=>
string(1) "1"
["title"]=>
string(9) "Flugzeuge"
["ebene"]=>
string(1) "2"
}
[12]=>
array(4) {
["menuindex"]=>
string(2) "27"
["parentindex"]=>
string(1) "3"
["title"]=>
string(25) "Autoradio mit LCD Anzeige"
["ebene"]=>
string(1) "2"
}
[13]=>
array(4) {
["menuindex"]=>
string(1) "5"
["parentindex"]=>
string(1) "3"
["title"]=>
string(8) "Bademode"
["ebene"]=>
string(1) "2"
}
[14]=>
array(4) {
["menuindex"]=>
string(2) "12"
["parentindex"]=>
string(1) "3"
["title"]=>
string(10) "Zigaretten"
["ebene"]=>
string(1) "2"
}
[15]=>
array(4) {
["menuindex"]=>
string(2) "25"
["parentindex"]=>
string(1) "5"
["title"]=>
string(22) "Autoradio mit Laufwerk"
["ebene"]=>
string(1) "3"
}
[16]=>
array(4) {
["menuindex"]=>
string(1) "9"
["parentindex"]=>
string(1) "5"
["title"]=>
string(9) "Krawatten"
["ebene"]=>
string(1) "3"
}
[17]=>
array(4) {
["menuindex"]=>
string(2) "30"
["parentindex"]=>
string(1) "6"
["title"]=>
string(3) "DVD"
["ebene"]=>
string(1) "1"
}
[18]=>
array(4) {
["menuindex"]=>
string(2) "10"
["parentindex"]=>
string(2) "12"
["title"]=>
string(12) "Herrenschuhe"
["ebene"]=>
string(1) "1"
}
[19]=>
array(4) {
["menuindex"]=>
string(2) "14"
["parentindex"]=>
string(2) "15"
["title"]=>
string(9) "Autoradio"
["ebene"]=>
string(1) "3"
}
[20]=>
array(4) {
["menuindex"]=>
string(1) "6"
["parentindex"]=>
string(2) "15"
["title"]=>
string(16) "Plasma Fernseher"
["ebene"]=>
string(1) "3"
}
[21]=>
array(4) {
["menuindex"]=>
string(1) "2"
["parentindex"]=>
string(2) "15"
["title"]=>
string(13) "Videorekorder"
["ebene"]=>
string(1) "3"
}
[22]=>
array(4) {
["menuindex"]=>
string(2) "11"
["parentindex"]=>
string(2) "16"
["title"]=>
string(10) "Handschuhe"
["ebene"]=>
string(1) "2"
}
[23]=>
array(4) {
["menuindex"]=>
string(2) "13"
["parentindex"]=>
string(2) "24"
["title"]=>
string(8) "Zigarren"
["ebene"]=>
string(1) "2"
}
[24]=>
array(4) {
["menuindex"]=>
string(2) "26"
["parentindex"]=>
string(2) "25"
["title"]=>
string(24) "Autoradio mit Chipkarten"
["ebene"]=>
string(1) "4"
}
[25]=>
array(4) {
["menuindex"]=>
string(1) "4"
["parentindex"]=>
string(2) "27"
["title"]=>
string(16) "Hosen mit Falten"
["ebene"]=>
string(1) "3"
}
[26]=>
array(4) {
["menuindex"]=>
string(2) "15"
["parentindex"]=>
string(2) "28"
["title"]=>
string(18) "Satellitenreciever"
["ebene"]=>
string(1) "2"
}
}

Jetzt ist die Baustelle, das Beispielsweise "Bekleidung & Schuhe" den menuindex - Wert 3 hat. Jetzt sollen alle Elemente die den parentindex - Wert 3 ihm folgen. Da das Ganze aber über mehr als 2 Ebenen geht, brauche ich eine Möglichkeit diese Elemente zu sortieren.
 
Schreibe bitte dein Array Fomatiert in CODE-Tags, damit man sieht wo die Arrays beginnen und wo sie enden. Wollte eigentlich helfen, hab aber grad keinen Bock 500 Zeilen zu formatieren.

Dazu gibst du den Array-Inhalt nochamls am Browser aus. Dann wechselst du auf die Source-Ansicht. Dort ist die Ausgabe von var_dump() sauber formatiert. Wenn du diese in CODE-Tags setzt, dann sind auch die ganzen Tabulatoren dabei und man kann es einigermasen lesen.

Beschränke dich dabei auf 3-5 Einträge die du grad für ein aktuelles Beispiel brauchst.
 
Sorry, war mein dummer Fehler. Hier mal der array in der Form wie ich ihn später weiter varbeite und in der Reihenfolge er auch sortiert werden sollte. Die Verkettung soll über menuindex=>parentindex erfolgen. Das ganze mit unterschiedlicher Tiefe.

3__0__Bekleidung & schuhe__1
27__3__Autoradio mit LCD Anzeige__2
4__27__Hosen mit Falten__3
5__3__Bademode__2
25__5__Autoradio mit Laufwerk__3
26__25__Autoradio mit Chipkarten__4

Das ist der orginal Black, wie er aus der Datenbank kommt.

3__0__Bekleidung & schuhe__1
27__3__Autoradio mit LCD Anzeige__2
5__3__Bademode__2
25__5__Autoradio mit Laufwerk__3
26__25__Autoradio mit Chipkarten__4
4__27__Hosen mit Falten__3

Hier der orginal Array für diese Elemente.

PHP:
array(5) {[0]=> array(4) { ["menuindex"]=> string(1) "3" ["parentindex"]=> string(1) "0" ["title"]=> string(19) "Bekleidung & schuhe" ["ebene"]=> string(1) "1" } [1]=> array(4) { ["menuindex"]=> string(2) "27" ["parentindex"]=> string(1) "3" ["title"]=> string(25) "Autoradio mit LCD Anzeige" ["ebene"]=> string(1) "2" } [2]=> array(4) { ["menuindex"]=> string(1) "5" ["parentindex"]=> string(1) "3" ["title"]=> string(8) "Bademode" ["ebene"]=> string(1) "2" } [3]=> array(4) { ["menuindex"]=> string(2) "25" ["parentindex"]=> string(1) "5" ["title"]=> string(22) "Autoradio mit Laufwerk" ["ebene"]=> string(1) "3" } [4]=> array(4) { ["menuindex"]=> string(2) "26" ["parentindex"]=> string(2) "25" ["title"]=> string(24) "Autoradio mit Chipkarten" ["ebene"]=> string(1) "4" } [5]=> array(4) { ["menuindex"]=> string(1) "4" ["parentindex"]=> string(2) "27" ["title"]=> string(16) "Hosen mit Falten" ["ebene"]=> string(1) "3" }
 
Der Array wird aus einer Datenbank heraus erzeugt. Hier die SQL Anweisung

Code:
SELECT menuindex,parentindex,title,ebene FROM menueeintraege WHERE ablagesteuerung=1 ORDER BY parentindex ASC, title ASC
 
Zurück