PHP Foreach loop from database to calculate sum

2019-08-12 08:57发布

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

3条回答
太酷不给撩
2楼-- · 2019-08-12 09:23

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.

查看更多
三岁会撩人
3楼-- · 2019-08-12 09:24

I would do it in the SQL not in PHP.

SELECT username, date, jobnumber, customer, worksite, duties, regulartime, overtime, (overtime + regulartime) as totaltime FROM table;
查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-08-12 09:27
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');
查看更多
登录 后发表回答