PHP Extra строка где-то в моей таблице с помощью whileloop - PullRequest
0 голосов
/ 22 марта 2019

Ну, у меня есть таблица с некоторыми датами и часами.Я получаю эти данные из своей базы данных, используя цикл while.

Я хочу добавить 1 строку после изменения даты к следующей, чтобы я мог рассчитать общее количество часов за день.Мне просто нужна 1 строка после каждого изменения дня (рисунок ниже, например)

            $stmt5->execute();   
            while($row = $stmt5->fetch(PDO::FETCH_ASSOC)){
                if($gewerkt == 0){
                    $gewerkt = $row['HOURS_WORKED'];
                }else{
                    $gewerkt = $gewerkt + $row['HOURS_WORKED'];
                }             
                echo "
                <td>" .$row['TRANSACTION_ID']."</td>
                <td>" .$row['RESOURCE_ID']."</td>
                <td></td>
                <td>" .$row['DEPARTMENT_ID']."</td>
                <td>" .$row['WORKORDER_BASE_ID']."/".$row['WORKORDER_LOT_ID'].".".$row['WORKORDER_SPLIT_ID']."-".$row['WORKORDER_SUB_ID'].":".$row['OPERATION_SEQ_NO']."</td>
                <td>" .date('Y-m-d', strtotime($row['TRANSACTION_DATE']))."</td>
                <td>" .TimeValue($row['CLOCK_IN'])."</td>
                <td>" .TimeValue($row['CLOCK_OUT'])."</td>
                <td>" .floatval($row['HOURS_BREAK'])."</td>
                <td>" .floatval($row['HOURS_WORKED'])."</td>
                <td></td>
                <td><form action='' method='POST'>
                            <button class='btn btn-default' type='submit' name='delete'>Verwijderen</button>
                    </form></td>
            </tbody>
            ";
            }

Фотография ниже является примером моей таблицы.Как видите, у меня первые 3 строки с одинаковой датой.после этих 3 строк мне нужна только 1 дополнительная строка, в которой я могу вычислить общее количество дней.

The photo

1 Ответ

0 голосов
/ 22 марта 2019

Вы можете объединить все строки и промежуточные итоги перед тем, как их отобразить.Этот подход может занимать немного памяти, но он очень удобочитаем.


// aggregate the rows first
while($row = $stmt5->fetch(PDO::FETCH_ASSOC)){
    $row['ROW_DATE'] = date('Y-m-d', strtotime($row['TRANSACTION_DATE']));
    $dateRows[$row['ROW_DATE']]['rows'][] = $row; // aggregate a 2D array
    $dateRows[$row['ROW_DATE']]['HOURS_WORKED'] = isset($dateRows[$row['ROW_DATE']]['HOURS_WORKED'])
        ? $dateRows[$row['ROW_DATE']]['HOURS_WORKED'] + $row['HOURS_WORKED']
        : $row['HOURS_WORKED'];
}

foreach ($dateRows as $date => $rows) {
    // loop through all the rows of the day
    foreach ($rows['rows'] as $row) {
        echo "
        <td>" .$row['TRANSACTION_ID']."</td>
        <td>" .$row['RESOURCE_ID']."</td>
        <td></td>
        <td>" .$row['DEPARTMENT_ID']."</td>
        <td>" .$row['WORKORDER_BASE_ID']."/".$row['WORKORDER_LOT_ID'].".".$row['WORKORDER_SPLIT_ID']."-".$row['WORKORDER_SUB_ID'].":".$row['OPERATION_SEQ_NO']."</td>
        <td>" .$date."</td>
        <td>" .TimeValue($row['CLOCK_IN'])."</td>
        <td>" .TimeValue($row['CLOCK_OUT'])."</td>
        <td>" .floatval($row['HOURS_BREAK'])."</td>
        <td>" .floatval($row['HOURS_WORKED'])."</td>
        <td></td>
        <td>
            <form action='' method='POST'>
                <button class='btn btn-default' type='submit' name='delete'>Verwijderen</button>
            </form>
        </td>\n";
    }

    // display a subtotal row
    echo "
    <td colspan='9'>Subtotal:</td>
    <td>{$rows['HOURS_WORKED']}</td>
    <td></td>
    <td></td>\n";
}
...