Spalte aus mehrdimensionalen Array summieren

TribunM

Erfahrenes Mitglied
Hallo PHP Freunde,

Wie der Titel schon sagt, habe ich ein mehrdimensionales array, um einen Baum darzustellen. Der Aufbau sieht folgendermaßen aus:
PHP:
	while($row = $database->database_fetch_assoc($result))
		{			
			
			if( !isset($categorie[$row['okat_id']]) ){
			$categorie[$row['okat_id']] =  array(
												"id" => $row['okat_id'], 
								     			"name" 	=> $row['okat_name'], 
									 			"amount" => $summe,
												"ukat" => array()
												);
			}
			$categorie[$row['okat_id']]['ukat'][] = array(									
											     			"name" 	=> $row['ukat_name'], 
												 		"amount" => $row['ukat_count']
}

Die Ausgabe sieht wie folgt aus:

Oberkategorie ID
Name
Summe Ergebnisse der Unterkategorien 1+2 usw.
- Unterkategorie 1 Name
- Ergebnisse1
- Unterkategorie 2 Name
- Ergebnisse2

Das klappt alles soweit. Mir fehlt aber noch $summe, welche die Summe der Ergebnisse aus dem ukat array mit jeweils gleicher okat_id enthalten soll. Nur kriege ich das nicht hin. Ich habe es mit array-sum versucht, aber wie greife ich auf die jeweilige amount Spalte zu und addiere diese so, dass ich Sie in $summe schreiben kann.

Arrays sind wirklich nicht meine Stärke und ich würde mich sehr freuen, wenn Ihr mir Tipps geben könntet, wie ich das lösen kann.

Danke Tribbi
 
Zuletzt bearbeitet:
Ich hatte schon mal was ähnliches gelösst und dann das folgende Beispiel geschrieben. Ev. hilft es dir weiter

PHP:
//Testdaten
$daten = array(array('ges_bestand' => 15), array('ges_bestand' => -30), array('ges_bestand' => 100));
//Summe aller ges_bestand ermitteln
echo array_sum(array_map(create_function('$e', 'return $e["ges_bestand"];'), $daten));
 
Ja das sieht gut aus. Aber wie übergebe ich den Wert an Summe? Direkt in die Schleife kriege ich bei $summe immer NULL, obwohl der counter funktioniert und die Unterkategorien brav zusammen zählt.

SIeht bisher so aus:

PHP:
while($row = $database->database_fetch_assoc($result))
        {            
            
            if( !isset($categorie[$row['okat_id']]) ){
            $categorie[$row['okat_id']] =  array(
                                                "id" => $row['okat_id'], 
                                                 "name"     => $row['okat_name'], 
                                                 "amount" => $summe,
                                                "ukat" => array()
                                                );
            }
            $categorie[$row['okat_id']]['ukat'][] = array(                                    
                                                             "name"     => $row['ukat_name'], 
                                                         "amount" => $row['ukat_count']
						         );  
			$summe = array_sum(array_map(create_function('$e', 'return $e["amount"];'), $categorie[$row['okat_id']]['ukat']));
		}

Wie kriege ich jetzt die Summe in $summe bei jedem Durchlauf? Wenn ich die Berechnung nach oben packe, klappt der counter logischerweise nicht, aber eben unterhalb übergibt der nicht die Variable. Funktioniert das überhaupt so?

Ich muss dringend noch etwas mit arrays machen, da steige ich echt nicht durch :-(
 
Zuletzt bearbeitet:
Es geht auch viel einfacher

PHP:
while ($row = $database->database_fetch_assoc ($result))
{
  if( !isset($categorie[$row['okat_id']]) )
  {
	$categorie[$row['okat_id']] = array (
	  "id" 	 => $row['okat_id'], 
	  "name"	 => $row['okat_name'], 
	  "amount" => 0,
	  "ukat"	 => array ()
	);
  }
  
  $categorie[$row['okat_id']]['ukat'][] = array (                                    
	"name"	 => $row['ukat_name'], 
	"amount" => $row['ukat_count']
  );
  
  $categorie[$row['okat_id']]['amount'] += $row['ukat_count'];
}

Grüße BN
 
Darauf hätte man auch selbst kommen können. Ich sagte ja, ich muss mich noch einmal etwas genauer mit arrays beschäftigen :rolleyes:


Vielen Dank. So klappt es bestens.
 
Zurück