PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Array aufsummieren


Marilu
28.10.2005, 11:08:55
Moin,

ich suche nach einer eleganten Möglichkeit, ein Array aufzusummieren. Das Array hat m Zeilen mit n Spalten. Ich möchte ein Array erhalten, das 1 Zeile mit n Spalten hat, wo die Summen der Spalten drinstehen. Gibts da was, ohne die einzelnen Zeilen durchlaufen zu müssen?

|Coding
28.10.2005, 12:00:44
Du musst in diesem Fall hingehen und mit einer Schleife alle Spalten durchlaufen und dann jeweils auf jede Spalte einmal array_sum() anwenden. Dann noch jeweils das Ergebnis der Summierung in ein Array schreiben und fertig.

Beispiel:

<?PHP
$array = array(array(1, 2, 3, 4, 5),
array(6, 7, 8, 9, 10));

$result = array();

foreach($array as $zw_summe){
$result[] = array_sum($zw_summe);
}

print_r($result);
?>

Ich hoffe ich habe dich da korrekt verstanden?

Marilu
28.10.2005, 12:10:25
> Ich hoffe ich habe dich da korrekt verstanden?

Nach Deinem Zahlenbeispiel möchte ich folgendes Array erhalten:

array(7, 9, 11, 13, 15)

|Coding
28.10.2005, 12:13:24
Möchtest Du es jetzt genau anders`herum wie im obigen Beispiel?

Marilu
28.10.2005, 13:32:20
Möchtest Du es jetzt genau anders`herum wie im obigen Beispiel?Ja. Du hast zeilenweise addiert, ich brauche es spaltenweise.

|Coding
28.10.2005, 14:08:06
Ich habe spaltenweise addiert:

array(1, array(6,
2, 7,
3, 8,
4, 9,
5) 10)

:-)

Spass bei Seite.

Dir wird wohl nichts anderes übrig bleiben als doch den umständlichen Weg zu gehen.

Versuch es mal so:

Durchlaufe alle Zeilen des Arrays und speichere jeden Wert (jeder Wert entspricht ja einem Eintrag in einer Spalte) einer Zeile in einem neuen Array. Am Ende hast Du dann m Arrays mit n Zeilen. Diese musst du dann noch aufsummieren, wie Oben schon gezeigt.

Marilu
28.10.2005, 14:27:00
Ja, genau so war jetzt mein Ansatz. Vielen Dank.

xabbuh
28.10.2005, 14:34:26
So müsste es auch mit einem Ergebnisarray funktionieren:

<?php
$array = array(
array(1, 2, 3, 4, 5),
array(6, 7, 8, 9, 10)
);

$result = array();
foreach($array as $line) {
foreach($line as $col => $cell) {
if(!array_key_exists($col, $result))
$result[$col] = 0;

$result[$col] += $cell;
}
}
?>

Marilu
31.10.2005, 16:38:36
Ja, das sollte auch gehen. Aber ich habe hier auch die geschachtelten Schleifen. Ich habs jetzt letztendlich so ähnlich gelöst, wie von Coding beschrieben. Trotzdem vielen Dank.