PHP Berechnung in mehrdimensionalen Array Speichern

djjlx

---???---
ID: 62937
L
9 Mai 2006
599
21
Hallo zusammen,

Folgende Situation:

Ich bin dabei ein kleines Berechnungsscript der Arbeitszeit zu erstellen nur leider fehlt mir gerade die Logik.

Und zwar

Ich habe einen Lieferschein [Lieferscheinnummer] auf diesen sind bis zu 4 Arbeiter vermerkt [personalid] und jeder dieser 4 Arbeiter kann 7 Tage Arbeitszeit angeben.

Die Berechnung läuft soweit das einzelne Arbeitszeiten Tag/Nacht als eigene Positionen [Pos] geteilt werden
in diesen Positionen kommt dann der Stundenwert [h] und der Geldwert [wert].

So die Berechnung erfolgt über die eingegeben Stundendaten aus einer DB. Bei der Berechung werden Tag/Nach Zeiten aufgeteilt und ausgewertet.

Nun zu meinen Problem wärend den einzelnen Schritten der Berechnung wollte ich die Ergebnisse in ein mehrdimensionales Array speichern nur komm ich gerande nicht auf einen grünen Zweig wie ich das Array aufbauen muss damit dies am Ende auf ein pdf gedruckt wird.

Eigentlich wollte ich

[Lieferschein]
[Nummer]​
[Personal ID]​
[Pos1]​
[stunden]
[wert]​
[Pos2]​
[Stunden]
[wert]​
[Personal ID]​
[Pos1]​
[stunden]
[wert]​
[Nummer]​
[Personal ID]​
[Pos1]​
[stunden]
[wert]​

Wobei die Ebene Pos1 usw bis zu 8 Positionen haben kann

So die ganze Berechnung erfolgt in einer while Schleife und würde die Ebenen anlegen und das ergebnis immer einzeln abspeichern.

Wie kann ich dieses Array anlegen komm gerade nicht auf einen grünen Zweig.

Bin für jede Hilfe dankbar.

Gruß

edit:
PHP:
$ergebnis = Array();

while($data = mysql_fetch_array($qry))
{
     $btb = $data['btb'] //lieferscheinnummer
     $pid = $data['pid'] // Personal ID
     
     $ergebnis[$btb]['pid'] = $pid;

     $int_qry = SELECT Zeiten WHERE $btb AND $pid // gekürzt für demostration
     $i = 0;
     while($time = mysql_fetch_array($int_qry))
     {
           $i++; 
           //Ganze Berechnung
           $ergebnis[$btb]['pid'][$pid]['pos'.$i][stunden] = 9;
           $ergebnis[$btb]['pid'][$pid]['pos'.$i][wert] = 150.00;
     }
}
Nur so funktionierts leider nicht
 
Zuletzt bearbeitet:
probiers mal so:

PHP:
$ergebnis = Array();

while($data = mysql_fetch_array($qry))
{
     $btb = $data['btb'] //lieferscheinnummer
     $pid = $data['pid'] // Personal ID
     
     $ergebnis[$btb]['pid'] = $pid;

     $int_qry = SELECT Zeiten WHERE $btb AND $pid // gekürzt für demostration
     $i = 0;
     while($time = mysql_fetch_array($int_qry))
     {
           $i++; 
           //Ganze Berechnung
           $ergebnis[$btb]['pid'][$pid]['pos'.$i]['stunden'] = 9;
           $ergebnis[$btb]['pid'][$pid]['pos'.$i]['wert'] = 150.00;
     }
}
 
Zuletzt bearbeitet:
Warum berechnest du das ganze nicht gleich mit MySQL?
Könntest du da etwas konkreter werden was du meinst?

Ich kanns in der DB zwischenspeichern und dann durchrechnen nur diesen Schritt wollte ich sparen. Bleibt aber scheinbar nichts anderes übrig ;)

probiers mal so:

PHP:
$ergebnis = Array();

while($data = mysql_fetch_array($qry))
{
     $btb = $data['btb'] //lieferscheinnummer
     $pid = $data['pid'] // Personal ID
     
     $ergebnis[$btb]['pid'] = $pid;

     $int_qry = SELECT Zeiten WHERE $btb AND $pid // gekürzt für demostration
     $i = 0;
     while($time = mysql_fetch_array($int_qry))
     {
           $i++; 
           //Ganze Berechnung
           $ergebnis[$btb]['pid'][$pid]['pos'.$i]['stunden'] = 9;
           $ergebnis[$btb]['pid'][$pid]['pos'.$i]['wert'] = 150.00;
     }
}
Leider die beiden ' helfen auch nicht :(
 
Dein PHP Code macht nichts weiter als nach btb bzw. pid zu gruppieren und dann die Werte zu addieren bzw. mit irgendeinen Faktor zu multiplizieren. Das ganze kannst du auch gleich in der MySQL-Abfrage machen.

PHP:
SELECT SUM(`stunden` * `wert`)  FROM Zeiten GROUP BY btb, pid
Wie auch immer die konkreten Spalten und Tabellen heißen. Die wirklich relevanten Informationen um da weiter zu helfen hast du ja weg gekürzt.
 
Achtung: Geldwerte als Gleitkommazahl zu speichern ist untauglich für Berechungen und für die Buchhaltung. Am besten auf einen geeigneten Datentyp ausweichen oder als Workaround die Beträge als Cent speichern, sofern das die Wertebereiche zulassen.
 
Danke für die Tipps ich hab mit einer 2 Tabelle gelöst.

Was sich auch als praktisch für eine Statisikberechnung erwiesen hat.

Mit dem Berechnen in der mysql muss ich mir erst zu gemüte führen da die Berechnung Zeitberechnungen sind

zb.: 01.01.2014 7:00 - 12:00 = 5 Stunden * Stundensatz

Gruß
djjlx
 
Zuletzt bearbeitet:
Solche Spaße können auch nach hinten losgehen. Beachten musst du unteranderem Schaltjahre, Schaltsekunden und entsprechende Daten. Am besten eine stabile Bibliothek dafür nehmen.
 
bedenken sollte man auch wenn es den nachtdienst gibt das die uhr 2x im jahr von 2 auf 3 uhr oder von 3 auf 2 uhr umgestellt wird.
 
Sofern du Anfang- und Endzeiten hast und so an die differenz kommst... wie schon erwähnt: Sommer-/Winterzeit, Schaltjahr/-sekunde, Zeitzonen, Zeitformate. Lustiges Thema :D

Für sowas am besten vorhandene Funktionen nutzen:
https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html

Da haben sich schon viele andere Gedanken um genau die Probleme gemacht.

Unter anderem gibts da timediff() und hours().

Man könnte sowas machen:
Code:
SELECT SUM(HOURS(TIMEDIFF('start','ende')) * 'stundensatz')
FROM Zeiten 
GROUP BY btb, pid

Und hoffen, dass das funktioniert (is jetzt einfach mal dahin getippt).