PHP - Dynamik bei der Array Zuweisung

JaEgErmEistEr

Registered User
Hi,

vielleicht hat hier jemand eine Idee: Ich möchte folgenden Quelltext dynamisch gestalten, sodass sich dieser an den Elementen aus der Variable keyToGroupArray orientiert, aber seht selbst:

PHP:
$keyToGroupArray = array('yearMonth', 'customer');
            
            $groups = array();
            
            foreach($array as $item) {
                if(count($keyToGroupArray) == 1) {
                    $groups[$item[$keyToGroupArray[0]]] += $item['volume'];
                } elseif(count($keyToGroupArray) == 2) {
                    $groups[$item[$keyToGroupArray[0]]][$item[$keyToGroupArray[1]]] += $item['volume'];
                } elseif(count($keyToGroupArray) == 3) {
                    $groups[$item[$keyToGroupArray[0]]][$item[$keyToGroupArray[1]]][$item[$keyToGroupArray[2]]] += $item['volume'];
                }
            }
Array sieht so aus:
Code:
array (86 items)    0 => array (8 items)          volume => 26 (double)          yearMonth => '201308' (6 chars)
usw.
Ergebnis soll sein (und ist es auch aber eben nicht dynamisch bis n Ebenen)

Code:
array (4 items)    201308 => array (1 items)          11714 => 8725 (double)    201309 => array (1 items)          11714 => 8725 (double)    201302 => array (1 items)          11601 => 370577 (double)
 
Ich habe so eine ungefähre Idee, worauf Du hinaus willst - bin mir aber nicht sicher. Kannst Du die von dir gewünschte Funktionsweise auch mal allgemeiner beschreiben in form einer umgangssprachlichen Algebra inkl. der von Dir gewollten Zieldatenstruktur. Auch die Angaben über das Input sind mir nen bissl arg wenig.
 
Im Endeffekt will ich eine "group_array" Funktion erstellen, die ähnlich funktioniert wie bei SQL. Also ich gruppiere nach Werten aus Feldelementen in den Arrays. Dazu gibt es auch wunderschöne Lösungen:
http://stackoverflow.com/questions/5945968/php-grouping-array

Problem an den ganzen Lösungen ist aber, dass sich diese immer nur auf einen Feldwert beschränken.

Ich möchte aber ein gruppiertes Array nach n Werten, ähnlich wie es auch bei SQL möglich ist.
Meine Lösung funktioniert zwar, ich weiß nur nicht wie ich diese dynamischer gestalten kann. Derzeitig müsste ich für jede Ebene die if-Schleife weiterführen was natürlich nicht optimal ist.

Hoffe ich konnte ein bisschen Klarheit schaffen.
 
Du versuchst auf Biegen und Brechen eine Funkton aus der Datenbanksprache SQL in eine Programmiersprache zu zwingen.
Es ist möglich dieses Verhalten zu emulieren, jedoch mit hohem Ressourcenaufwand.
Viel besser wäre es wenn du von vornerein nicht mit reinen Datenwerten sondern Objekten arbeiten würdest welche automagisch bereits die Verlinkungen und Zugriffsfunktionen bereitstellen.

Eine Realisierungsmöglichkeit wäre allerdings dass du zuerst ein n-dimensionales Array aus deiner aktuellen Struktur baust welche die groupBy abbildet und jeweils auf der n-ten Dimension die Werte durch array_sum() zusammenzählen lässt.
Danach dann die Struktur aus den n-1 vorangehenden Stufen ableiten.
 
Back
Top