unbestimmte Anzahl Arrays addieren ?

mrepox

Erfahrenes Mitglied
Hallo Leutz,

ich habe mal wieder ein Problem.
Diesesmal gehts um ein PHP Warenwirtschaft Programm.

Beim erstellen einer Rechnung werden Menge, Artikel, Einzelpreis eingegeben.
Der Gesamtpreis einer Position errechnet sich logischer aus der Menge und dem Einzelpreis und
wird beim schreiben in die DB (mysql) mit übermittelt.

Mein eigentliches Problem liegt im addieren der Gesamtpreise aller Positionen was dann die Rechnungssumme ergiebt.

Die Anzahl der Positionen(Arrays) ist unbestimmt, bzw. jedesmal anders.

Die Idee lag darin die Positionen aus der DB mit einer while Schleife auszulesen und als Arrays zu speichern.
Diese sollen dann addiert werden und als Rechnungsgesamtsumme in die DB geschrieben werden.

PHP:
function select_positionen($kundennummer)

{
$conn = db_connect();

$query = "select gesamtpreis FROM faktura WHERE knnr = '$kundennummer'";

   $result = $conn->query($query);

while($posgesamt = $result->fetch_assoc())   // bzw. array
    {
    $posgesamt =  //wäre toll wenn jemand hier eine Idee hätte
    
    }
 }


Wer kann mir hier helfen? Mein Latein ist nun leider zu ende. Wäre array_sum() eine Lösung?

Markus
 
Zuletzt bearbeitet:
Habe jetzt mal einen Versuch gestartet, allerdins mit Ergebnis Summe=0

Bin wahrscheinlich auf dem sogenannten "Holzweg", wäre prima wenn ihr mir dabei helfen würdet.

PHP:
 function select_artikel($bbb)

{
$conn = db_connect();

$query = "select gesamtpreis FROM faktura WHERE knnr = '$bbb'";

   $result = $conn->query($query);
   
$aus_array = array();

while($aus = $result->fetch_assoc())
    {
    $aus_array[] = $aus;
     
    
    }
    echo "Summe = " . array_sum($aus_array) . "\n";
 }


var_dump($aus_array) gibt folgendes aus:

PHP:
Summe = 0 array(2) { [0]=>  array(1) { ["gesamtpreis"]=>  string(3) "144" } [1]=>  array(1) { ["gesamtpreis"]=>  string(2) "22" } }
 
Zuletzt bearbeitet:
Mach das doch so:
PHP:
<?php
/*
...
*/
while($aus = $result->fetch_assoc()) 
    { 
    $aus_array[] = $aus['gesamtpreis']; 
      
     
    } 
    echo "Summe = " . array_sum($aus_array) . "\n"; 
 }
?>

So müsstest du ein
indiziertes Array erhalten und dann sollte array_sum () funktionieren.

Achja auf http://de.php.net/manual/de/function.array-sum.php steht:

Anmerkung: PHP Versionen vor 4.2.1 haben das übergebene Array selbst modifiziert, und Strings in Zahlen konvertiert (welche abhängig von deren Wert meist zu null konvertiert wurden).
 
Super gut, das klappt!

Damit hast du mir sehr geholfen. Kannst du mir das denn nochmal näher erklären?

Ich habe das auf php.net auch gelesen nur konnte ich mir keinen näheren reim draus machen.

Gruß und danke
 
gerne das letztere. habe echt 1,5 stunden rumgebastelt und bin da nicht drauf gekommen....;-)


hier läuft übrigends PHP Version 5.1.5
 
Zuletzt bearbeitet:
Naja er hat einfach bei jedem Durchlauf der Schleife das Ergebnis dem Array $aus_array hinzugefügt und mit der Funktion array_sum() werden alle Elemente im Array ($aus_array) zusammengezählt.

cAm3eel.
 
@cAm3eel

toll, das ist mir bewußt, habe die funktion ja selber geschrieben. nur habe ich kein indiziertes array benutzt und das hätte ich gerne erklärt bekommen.;)
 
Im Prinzip hast du es dir mit var_dump schon selber erklärt. Dein Array $aus_array war ein verschachteltes Array da du in der while Schleife $aus Reingeschrieben hast und $aus durch mysql_fetch_assoc selber zum array wurde. Somit hat das nicht funktioniert.

Durch $aus_array = $aus['gesamtpreis'] hab ich wirklich nur die Zahlenwerte in das Array $aus_array geschrieben.

Du kannst ja mal noch ein array Anlagen z.B. $aus_array2 und dort nochmal in der while schleife $aus_array2 = $aus; zu dem bestehenden
<font color="#000000">$aus_array = $aus['gesamtpreis']; hinzufügen und dir das ganze dann nach der while Schleife ausgeben lassen.

PHP:
<?php
/*
...
*/
$aus_array = array ();
$aus_array2 = array ();

while ($aus = $result->fetch_assoc())
{
 $aus_array[] = $aus['gesamtpreis'];
 $aus_array2[] = $aus;
}
echo "<pre>\n";
print_r ($aus_array);
echo "</pre>\n";
echo "<pre>\n";
print_r ($aus_array2);
echo "</pre>\n";
?>

Damit kannst du dir ja mal die 2 Arrays vergleichen dann verstehst du vieleicht warum es nicht funktioniert hat.
 
Zurück