0

我有一张表格,里面填满了数据库信息。这张表如下

在此处输入图像描述

接下来我的概览页面上有一个表格,看起来像这样

在此处输入图像描述

但是我怎样才能在 15:00 添加这个名字呢?

这是我使用的代码。

    $matrix = array();
    // matrix vullen
    while ($row = $res->fetch_assoc()) {
        if ($row['datum_van'] != $date) {
            $date = $row['datum_van'];
            $matrix[$date] = $times;
        }
        $matrix[$date][$row['tijd_van']][] = $row['name'];
        $matrix[$date][$row['tijd_tot']][] = $row['name'];
    }
    // de tabel beginnen
    $var = '<table class="striped">';
    $var .= '<tr class="header" id="ax">';
    $var .= '<td id="a_datum">Datum</td>';

    for($i=9; $i<24; $i++) {

        $var .= '<td>' . $i . ':00</td>';                        
    }
    $var .= '<td>geen eindtijd</td>'; 

    $var .= '</tr>';
    // de matrix uitlezen
    foreach ($matrix as $datekey => $timearray) {
        $var .= '<tr><td>' . $datekey . '</td>';
        foreach ($timearray as $names) {
            $var .= '<td>';
            if (count($names) > 0) {
                $var .= implode('<br>', $names);
            }
            else {
                $var .= '&nbsp;';
            }
            $var .= '</td>';
        }
        $var .= '</tr>' . PHP_EOL;
    }
    $var .= '</table>';
    echo $var;
4

3 回答 3

1

根据您将名称填充到 $timearray 的方法(代码未显示),您需要再添加一项检查。您需要检查是否存在开始时间在当前时间之前,结束时间在当前时间之后的名称条目。像这样的简单检查将有助于正确填充 $timearray:

if $cur_time < $time_start and $cur_time > $time_end
    // Add the name to the time-array

其中 $cur_time 是您正在评估的时间,time_start 和 time_end 是您存储在数据库表中的值。

于 2013-10-13T10:01:06.887 回答
0

在不知道您的完整数据集的情况下...检查时间是否大于(或等于)开始时间并小于(或等于)结束时间,如果两种情况都为真,请将人名放在字段中。

于 2013-10-13T09:58:40.840 回答
0

问题是您只使用此代码为这两个单元格分配值

$matrix[$date][$row['tijd_van']][] = $row['name'];
$matrix[$date][$row['tijd_tot']][] = $row['name'];

您需要检查这两个值之间的时间间隔vanvon并为两者之间的时间设置名称。

这可以通过以下方式完成

$start_timestamp = strtotime($row['tijd_van']);
$scnds_between = strtotime($row['tijd_tot']) - $start_timestamp;
$hrs_between = floor($scnds_between / 3600) - 1;
// -1 because the first hour is already in matrix
for ($i=1; $i<=$hrs_between; ++$i) {
    $new_date = date("Y-m-d H:i:s", $start_timestamp+($i*3600));
    $matrix[$date][$new_date][] = $row['name'];
}

这仅tijd_*在类似于datum_*值并且可以(或修改为)与 strtotime 一起使用时才有效

于 2013-10-13T09:59:45.970 回答