简体   繁体   中英

PHP Foreach loop from database to calculate sum

I am wondering for all of you more experienced coders how I would take a value coming from my database, which is stored as a double

(Variables regulartime and overtime)

And then calculate the sum of each of the two columns..

foreach ($result as $row) {
    echo '<tr><td>' . $row['username'] . '</td>
        <td>' . $row['date'] . '</td>
        <td>' . $row['jobnumber'] . '</td>
        <td>' . $row['customer'] . '</td>
        <td>' . $row['worksite'] . '</td>
        <td>' . $row['duties'] . '</td>
        <td>' . $row['regulartime'] . '</td>
        <td>' . $row['overtime'] . '</td></tr>';


}

Thank you so much for your help.

Tyler

EDIT I want to add a final row at the bottom of the two to display the sums

function calculateSum(array $data, $field)
{
    return array_reduce(
        $data,
        function ($result, $elem) use ($field) {
            return $result + $elem[$field];
        }, 0
    );
}

calculateSum($result, 'regulartime');
calculateSum($result, 'overtime');

As you want to display a table containing each row, then a final row containing the sum, you only have to use your existing foreach loop to increment the totals :

$totalRegularTime = 0;
$totalOverTime = 0;

foreach ($result as $row) {
    echo '<tr><td>' . $row['username'] . '</td>
        <td>' . $row['date'] . '</td>
        <td>' . $row['jobnumber'] . '</td>
        <td>' . $row['customer'] . '</td>
        <td>' . $row['worksite'] . '</td>
        <td>' . $row['duties'] . '</td>
        <td>' . $row['regulartime'] . '</td>
        <td>' . $row['overtime'] . '</td></tr>';

    $totalRegularTime += $row['regulartime'];
    $totalOverTime += $row['overtime'];
}

echo '<tr><td colspan="6">TOTAL</td>
    <td>' . $totalRegularTime . '</td>
    <td>' . $totalOverTime . '</td></tr>';



However if you didn't need to display all the rows in a table first, the best solution would have been to get the sums using SQL.
Eternal1 's answer is a good alternative if you can't use SQL (if your data doesn't come from database for example). And it's pretty clean.

我会在SQL中而不是在PHP中做到这一点。

SELECT username, date, jobnumber, customer, worksite, duties, regulartime, overtime, (overtime + regulartime) as totaltime FROM table;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM