Gunther: Über Array iterien und Unterarrays sortieren

Beitrag lesen

Hallo Selfgemeinde,

ich habe ein Problem beim Sortieren eines Arrays.
Folgendes (konkretes) Beispiel:

Array
(
    [id] => tutorials
    [level] => 0
    [filetype] => d
    [name] => tutorials
    [title] => Array
        (
            [0] => Tutorials
            [1] =>
            [2] =>
        )

[sort] => Tutorials
    [descendants] => Array
        (
            [0] => Array
                (
                    [id] => tutorials:index
                    [level] => 1
                    [filetype] => f
                    [name] => index
                    [title] => Array
                        (
                            [0] => Index
                            [1] =>
                            [2] =>
                        )

[sort] => Index
                )

[1] => Array
                (
                    [id] => tutorials:lua
                    [level] => 1
                    [filetype] => d
                    [name] => lua
                    [title] => Array
                        (
                            [0] => Lua
                            [1] => LUA Tutorials
                            [2] =>
                        )

[sort] => LUA Tutorials
                    [descendants] => Array
                        (
                            [0] => Array
                                (
                                    [id] => tutorials:lua:index
                                    [level] => 2
                                    [filetype] => f
                                    [name] => index
                                    [title] => Array
                                        (
                                            [0] => Index
                                            [1] => LUA Tutorials
                                            [2] =>
                                        )

[sort] => LUA Tutorials
                                )

[1] => Array
                                (
                                    [id] => tutorials:lua:unterordner_lua
                                    [level] => 2
                                    [filetype] => d
                                    [name] => unterordner lua
                                    [title] => Array
                                        (
                                            [0] => Unterordner Lua
                                            [1] =>
                                            [2] =>
                                        )

[sort] => Unterordner Lua
                                    [descendants] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => tutorials:lua:unterordner_lua:index
                                                    [level] => 3
                                                    [filetype] => f
                                                    [name] => index
                                                    [title] => Array
                                                        (
                                                            [0] => Index
                                                            [1] =>
                                                            [2] =>
                                                        )

[sort] => Index
                                                )

)

)

)

)

[2] => Array
                (
                    [id] => tutorials:s5_-_dedk_tutorials
                    [level] => 1
                    [filetype] => d
                    [name] => s5_-_dedk_tutorials
                    [title] => Array
                        (
                            [0] => S5 - Dedk Tutorials
                            [1] => S5 - DEdK Tutorials
                            [2] =>
                        )

[sort] => S5 - DEdK Tutorials
                    [descendants] => Array
                        (
                            [0] => Array
                                (
                                    [id] => tutorials:s5_-_dedk_tutorials:index
                                    [level] => 2
                                    [filetype] => f
                                    [name] => index
                                    [title] => Array
                                        (
                                            [0] => Index
                                            [1] => S5 - DEdK Tutorials
                                            [2] =>
                                        )

[sort] => S5 - DEdK Tutorials
                                )

[1] => Array
                                (
                                    [id] => tutorials:s5_-_dedk_tutorials:multiplayer
                                    [level] => 2
                                    [filetype] => d
                                    [name] => multiplayer
                                    [title] => Array
                                        (
                                            [0] => Multiplayer
                                            [1] => Multiplayer
                                            [2] =>
                                        )

[sort] => Multiplayer
                                    [descendants] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => tutorials:s5_-_dedk_tutorials:multiplayer:index
                                                    [level] => 3
                                                    [filetype] => f
                                                    [name] => index
                                                    [title] => Array
                                                        (
                                                            [0] => Index
                                                            [1] => Multiplayer
                                                            [2] =>
                                                        )

[sort] => Multiplayer
                                                )

)

)

[2] => Array
                                (
                                    [id] => tutorials:s5_-_dedk_tutorials:verzeichnis_2
                                    [level] => 2
                                    [filetype] => d
                                    [name] => verzeichnis_2
                                    [title] => Array
                                        (
                                            [0] => Verzeichnis 2
                                            [1] => Level 1 Überschrift
                                            [2] =>
                                        )

[sort] => Level 1 Überschrift
                                    [descendants] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => tutorials:s5_-_dedk_tutorials:verzeichnis_2:index
                                                    [level] => 3
                                                    [filetype] => f
                                                    [name] => index
                                                    [title] => Array
                                                        (
                                                            [0] => Index
                                                            [1] => Level 1 Überschrift
                                                            [2] =>
                                                        )

[sort] => Level 1 Überschrift
                                                )

)

)

)

)

)

)

Dieses Array, welches ja (theoretisch) eine beleibige Tiefe haben kann, möchte ich nun durchgehen und jeweils alle Arrays unter [descendants] mittels einer benutzerdefinierten Funktion sortieren lassen (also per usort).

Ich kriege es aber einfach nicht hin, weder mit irgendwelchen for, foreach, while, each, noch sonst irgendwelchen Konstrukten.

Frage: Wie baue ich eine entsprechende Schleife/ Rekursion, sodass ich jedes enthaltene descendants-Array mit meiner Sortierfunktion sortiert bekomme?

Und nein: Am Aufbau des Arrays kann ich nichts verändern.

Vielen Dank für eure Hilfe - ich bin echt am verzweifeln!

Gruß Gunther