Array Summe

Registrierer

Erfahrenes Mitglied
Ich habe mehrere Arrays, hier im Beispiel 4 mit verschiedenen Einträgen.
Wie kann ich diese summieren, so dass wie hier im Beispiel als Summe 15 heraus kommt?

Mit sum(), count(), sum_array() usw. komme ich hier nicht weiter...

Array
(
[0] => 2
)

Array
(
[0] => 6
)

Array
(
[0] => 4
)

Array
(
[0] => 3
)
 
Hi

sind die Array selber Elemente eines Arrays?
Oder passen sie irgendie wurch den Namen zusammen?
Dann mach eine Schleife.

Sonst geht nur a+b+c+d+...
 
Oder mit einem array_merge() zusammenziehen und mit array_sum() die Summe bilden
PHP:
$a = Array(0 => 2);
$b = Array(0 => 6);
$c = Array(0 => 4);
$d = Array(0 => 3);

echo array_sum(array_merge($a, $b, $c, $d));
 
Hier mal mein Konstrukt vereinfacht:
Ich treffe eine Kundenvorauswahl in der ersten Abfrage, um in der zweiten die KFZ des jeweiligen aufzulisten.
PHP:
<?PHP
foreach ($_POST['auswahl'] as $nummern) {
 $sb = mysql_query("SELECT KDNR FROM ".$kunden." WHERE KDNR = '".$nummern."');
 $zeile  = mysql_fetch_array($sb);

 $kfzz   = mysql_query("SELECT AMTKZ FROM ".$kfz." WHERE KDNR = '".$zeile['KDNR']."'");
 $anz_kfz = mysql_num_rows($kfzz);
 echo "<pre>". print_r($anz_kfz, true) ."</pre>";
}
?>
Ausgabe hier:
2

6

4

3

wenn ich es so mache:
PHP:
<?PHP
foreach ($_POST['auswahl'] as $nummern) {
 $sb = mysql_query("SELECT KDNR FROM ".$kunden." WHERE KDNR = '".$nummern."');
 $zeile  = mysql_fetch_array($sb);

 $kfzz   = mysql_query("SELECT AMTKZ FROM ".$kfz." WHERE KDNR = '".$zeile['KDNR']."'");
 $anz_kfz = mysql_num_rows($kfzz);
 $anz_kfz = array($anz_kfz);
 echo "<pre>". print_r($anz_kfz, true) ."</pre>";
}
?>
hab ich folgende Ausgabe:
Array
(
[0] => 2
)

Array
(
[0] => 6
)

Array
(
[0] => 4
)

Array
(
[0] => 3
)

Das entspricht der Anzahl der jeweils zugehörigen Einträge (KFZ), wo ich die Summe benötige.

Und jetzt stelle ich mich an ;-)
 
Du hast da eine Fehlüberlgung drin. Du machst für jeden die Anzahl in einen eigenen Array und überschreibst den alten Wert.

Du hast 2 möglichkeiten.
Die einfachere: Du fügst diene Werte einem Array hinzu und summierrst am schluss
PHP:
//Array initialisieren
$kfz = array();
foreach ($_POST['auswahl'] as $nummern) {
	$sb = mysql_query("SELECT KDNR FROM ".$kunden." WHERE KDNR = '".$nummern."'");
	$zeile  = mysql_fetch_array($sb);

	$kfzz   = mysql_query("SELECT AMTKZ FROM ".$kfz." WHERE KDNR = '".$zeile['KDNR']."'");
	$anz_kfz = mysql_num_rows($kfzz);
	//Die Anzahl dem Array hinzufügen
	$kfz[] = $anz_kfz;
}
//Summe bilden
$count= array_sum($kfz);
}

Oder aber schöner, du packst alles in ein sauberes Query.
Wobei ich gerade sehe, dass du das erste Query gar nicht brauchst, da $zeile['KDNR'] immer gleich $nummern ist.

Ist KDNR eine Nummer? Sollte -also ohne die ' im SQL schreiben

Auf alle Fälle kannst du das mit einem einzigen DB-Aufruf machen was besser für die Performance ist.
Das Query
SQL:
SELECT 
	COUNT(*) AS cnt 
FROM 
	{$kfz} 
WHERE
	KDNR IN ({$nummerList});
Und in PHP umgesetzt
PHP:
$nummerList = implode(', ', $_POST['auswahl']);
$sql = "
SELECT COUNT(*) AS cnt 
FROM {$kfz} 
WHERE KDNR IN ({$nummerList});
";
$result = mysql_fetch_array($sql);
$count = mysql_result($result, 0);
 
Zuletzt bearbeitet von einem Moderator:
Hast natürlich Recht, zweimal Kundennummer abfragen ist Unsinn.
Hab es jetzt so:
PHP:
<?PHP
foreach ($_POST['auswahl'] as $nummern) {
 $kfzz    = mysql_query("SELECT AMTKZ FROM ".$kfz." 
 Inner Join ".$kunden." ON ".$kunden.".KDNR = ".$kfz.".KDNR
 WHERE ".$kfz.".KDNR = '".$nummern."' ");
 
 while ($kfz_zeile  = mysql_fetch_array($kfzz)) {
  echo $kfz_zeile['AMTKZ'].'<br>';
 }
}
echo count($_POST['auswahl']);
?>
Die Foreach Schleife wird im Beispiel 4 mal durchlaufen (4 Kunden), und die While Schleife 15 mal (15 KFZ).

Jetzt habe ich es anders, aber immer noch nicht richtig!
Wie komme ich an die 15? :-)
 
Dein Count() auf die Eingaebparamter bringt jetzt aber wirklich nix. Ich habe dir 2 Ansätze geliefert. Versuche einen von beiden Umzusetzen und du hast deine Summe.
Am einfachsten du nimmst mein erstes Besipiel und deine jetztiges Script und kombinierst. Alle wichtigen Punkte zur Zählung sind dort mit Kommentaren versehen.
Also, los von Rom!
 
Zurück