Umstrukturierung eines Arrays anhand einer rekursiven Funktion umstrukturieren
Hallo,
ich u.a. folgende Arrays in einer (ziemlich flachen) Hierarchie:
Array1:
Array(
[4042] => Array
(
[level2] => 10
[level3] => 78
[level4] => 159
)
[4043] => Array
(
[level2] => 10
[level3] => 78
[level4] => 158
)
[4046] => Array
(
[level2] => 10
[level3] => 87
[value] => 5
)
)
Array2:
Array
(
[3791] => Array
(
[level2] => 23
[level3] => 135
[level4] => 171
)
[3792] => Array
(
[level2] => 23
[level3] => 135
[level4] => 172
)
)
Array3:
Array
(
[45125] => Array
(
[level2] => 34
[level3] => 139
[level4] => 175
[value] => test
)
[45126] => Array
(
[level2] => 34
[level3] => 139
[level4] => 176
[value] => test123
)
)
Wie kann ich anhand einer Funktion schaffen die einzelnen Levels (1-4) in eine tiefe Hierarchie umzudwandeln?
D.h. zB für Array1:
[4042] => Array
(
10 => Array(78 => Array(159, 158), 87 => 5)
)
)
Array2:
[3791] => Array
(
23 => Array(135 => Array(171, 172))
)
Array3:
[45125] => Array
(
34 => Array(139 => Array(175 => "test", 176 => "test123"))
)
Es geht darum das Array möglichst zu klein zu halten und die doppelten Werte "rauszuschmeißen".
Wäre es mit einer rekursiven Funktion möglich so etwas dynamisch zu generieren?
ich u.a. folgende Arrays in einer (ziemlich flachen) Hierarchie:
Array1:
Array(
[4042] => Array
(
[level2] => 10
[level3] => 78
[level4] => 159
)
[4043] => Array
(
[level2] => 10
[level3] => 78
[level4] => 158
)
[4046] => Array
(
[level2] => 10
[level3] => 87
[value] => 5
)
)
Array2:
Array
(
[3791] => Array
(
[level2] => 23
[level3] => 135
[level4] => 171
)
[3792] => Array
(
[level2] => 23
[level3] => 135
[level4] => 172
)
)
Array3:
Array
(
[45125] => Array
(
[level2] => 34
[level3] => 139
[level4] => 175
[value] => test
)
[45126] => Array
(
[level2] => 34
[level3] => 139
[level4] => 176
[value] => test123
)
)
Wie kann ich anhand einer Funktion schaffen die einzelnen Levels (1-4) in eine tiefe Hierarchie umzudwandeln?
D.h. zB für Array1:
[4042] => Array
(
10 => Array(78 => Array(159, 158), 87 => 5)
)
)
Array2:
[3791] => Array
(
23 => Array(135 => Array(171, 172))
)
Array3:
[45125] => Array
(
34 => Array(139 => Array(175 => "test", 176 => "test123"))
)
Es geht darum das Array möglichst zu klein zu halten und die doppelten Werte "rauszuschmeißen".
Wäre es mit einer rekursiven Funktion möglich so etwas dynamisch zu generieren?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 289223
Url: https://administrator.de/contentid/289223
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Hi,
bin mir nicht sicher ob dein 4042-Array überhaupt konsistent ist.
Sieht aus wie ein Tree. kannst mal nach compressing Tree o.ä. suchen. Vll findest du was fertiges.
Sonst ja, rekursiv muss das auch gehen: Vergleich die Werte das ersten Levels. Für jeden Unique-Wert rufst du das ganze fürs nächste Level auf. Wenn du das letzte Array-Element erreicht hast, dann ist's fertig.
Wieso willst du das ganze umbauen?
sg Dirm
bin mir nicht sicher ob dein 4042-Array überhaupt konsistent ist.
Sieht aus wie ein Tree. kannst mal nach compressing Tree o.ä. suchen. Vll findest du was fertiges.
Sonst ja, rekursiv muss das auch gehen: Vergleich die Werte das ersten Levels. Für jeden Unique-Wert rufst du das ganze fürs nächste Level auf. Wenn du das letzte Array-Element erreicht hast, dann ist's fertig.
Wieso willst du das ganze umbauen?
sg Dirm
Hallo Joeker,
probiers mal mit Array_walk_recursive
php.net/manual/de/function.array-walk-recursive.php
Wenn du die Arraykeys auch brauchst ist es nicht geeignet, aber wenn du nur die Werte brauchst müsste es gehen.
Dann schnappst du dir in deiner Funktion die Arraywerte und schreibst sie ins tiefe Array.
LG Larmina
probiers mal mit Array_walk_recursive
php.net/manual/de/function.array-walk-recursive.php
Wenn du die Arraykeys auch brauchst ist es nicht geeignet, aber wenn du nur die Werte brauchst müsste es gehen.
Dann schnappst du dir in deiner Funktion die Arraywerte und schreibst sie ins tiefe Array.
LG Larmina