joeker
Goto Top

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?

Content-ID: 289223

Url: https://administrator.de/contentid/289223

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

Dirmhirn
Dirmhirn 24.11.2015 um 14:12:45 Uhr
Goto Top
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
joeker
joeker 24.11.2015 um 14:25:43 Uhr
Goto Top
Es geht um ein Projekt, an dem ich arbeite. Nun bin ich mit meiner DB-Abfrage auf das Resultat gestoßen und jetzt muss ich es für eine bestimmte Ansicht optimieren.
Ich versuch mal mit der Recherche nach "compressing Tree" weiter zu kommen.

Es stimmt - das mit dem 4042-Array - so sollte es normalerweise aussehen:
10 => Array(78 => Array(159, 158)), array(87 => 5))
joeker
joeker 24.11.2015 um 15:35:38 Uhr
Goto Top
Nach einiger Recherche und vielen gescheiterten Versuchen hab ich leider mein Resultat nicht erreichen können.
Könntest du ggf. anhand eines Pseudocodes mir zeigen, wie ich den Anfang machen könnte?
Mit rekursiven Funktionen hab ich leider zu wenig Erfahrungen. face-sad
Larmina
Lösung Larmina 14.12.2015 aktualisiert um 19:13:42 Uhr
Goto Top
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
joeker
joeker 14.12.2015 um 19:14:46 Uhr
Goto Top
Danke Larmina,
Aber ich hab bereits eine andere Lösung gefunden, wo ich keine rekursive Funktion benötige ;)