【问题标题】:PHP HTML dynamically create table for time class schedulePHP HTML动态创建时间课程表
【发布时间】:2019-09-05 01:41:19
【问题描述】:

im 试图创建一个班级调度表,我想从可能的结果集中绘制时间表以创建一个表格表示。

我有一个固定的标题或天 MONDAY-SATURDAY 在顶部和 7:00 AM-9:00 pm 在表格的左侧。

$scheduledet = json_decode(json_encode($data['scheduledet']), true);
print_r($scheduledet);
$week_days = array('M','T','W','TH','F','S');
$range=range(strtotime("07:00"),strtotime("22:00"),30*60);
$rowspan = 0;
$rangetime = [];
foreach($range as $time){
    $rangetime[] = date("H:i",$time);
}
foreach($week_days as $key => $wday){
    $schedfortheday = array_filter($scheduledet, function ($item) use ($wday) {
        if ($item['day'] == $wday) {
            return true;
        }
        return false;
    });

    foreach ($schedfortheday as $key => $value) {
        $rowspan = 0;
        $count = 1;
        foreach ($rangetime as $k => $v) {

            if(strtotime($v) >= strtotime($value['fromtime']) && strtotime($v) <= strtotime($value['totime'])){
                $rowspan ++;
            }
        }
    }
}



<table border="2" style= "width:100%; margin: 0 auto;" cellpadding="0" cellspacing="0">
    <tr>
        <th scope="col">&nbsp;</th>
        <th scope="col">Monday</th>
        <th scope="col">Tuesday</th>
        <th scope="col">Wednesday</th>
        <th scope="col">Thursday</th>
        <th scope="col">Friday</th>
        <th scope="col">Saturday</th>
    </tr>
        <tr>
        <td>7:00 AM</td>
    </tr>
    <tr>
        <td>7:30 AM</td>
    </tr>
    <tr>
        <td>8:00 AM</td>
    </tr>
    <tr>
        <td>8:30 AM</td>
    </tr>
    <tr>
        <td>9:00 AM</td>
    </tr>
    <tr>
        <td>9:30 AM</td>
    </tr>
    <tr>
        <td>10:00 AM</td>
    </tr>
    <tr>
        <td>10:30 AM</td>
    </tr>
    <tr>
        <td>11:00 AM</td>
    </tr>
    <tr>
        <td>11:30 AM</td>
    </tr>
    <tr>
        <td>12:00 PM</td>
    </tr>
    <tr>
        <td>12:30 PM</td>
    </tr>
    <tr>
        <td>1:00 PM</td>
    </tr>
    <tr>
        <td>1:30 PM</td>
    </tr>
    <tr>
        <td>2:00 PM</td>
    </tr>
    <tr>
        <td>2:30 PM</td>
    </tr>
    <tr>
        <td>3:00 PM</td>
    </tr>
    <tr>
        <td>3:30 PM</td>
    </tr>
    <tr>
        <td>4:00 PM</td>
    </tr>
    <tr>
        <td>4:30 PM</td>
    </tr>
    <tr>
        <td>5:00 PM</td>
    </tr>
    <tr>
        <td>5:30 PM</td>
    </tr>
    <tr>
        <td>6:00 PM</td>
    </tr>
    <tr>
        <td>6:30 PM</td>
    </tr>
    <tr>
        <td>7:00 PM</td>
    </tr>
    <tr>
        <td>7:30 PM</td>
    </tr>
    <tr>
        <td>8:00 PM</td>
    </tr>
    <tr>
        <td>8:30 PM</td>
    </tr>
    <tr>
        <td>9:00 PM</td>
    </tr>

</table>
Array(Array
    (
        'id' => '4545',
        'classid' => '1842',
        'fromtime' => '09:30:00',
        'totime' => '11:30:00',
        'day' => 'M',
        'room' => 'B01',
        'code' => 'BCS 1',
        'subdesc' => 'IT APPLICATION TOOLS IN BUSINESS',
        'units' => '3'
    ), Array(
        'id' => '4460',
        'classid' => '1596',
        'fromtime' => '10:30:00',
        'totime' => '11:30:00',
        'day' => 'M',
        'room' => '122A',
        'code' => 'PS 101',
        'subdesc' => 'FUNDAMENTALS OF POLITICAL SCIENCE',
        'units' => '3'
    ),Array
    (
        'id' => '4463',
        'classid' => '1598',
        'fromtime' => '13:00:00',
        'totime' => '14:00:00',
        'day' => 'M',
        'room' => 'TBA',
        'code' => 'PSOE 1',
        'subdesc' => 'PHILIPPINE POLITICAL THOUGHT',
        'units' => '3'
    ),Array(
        'id' => '3881',
        'classid' => '1597',
        'fromtime' => '14:00:00',
        'totime' => '15:00:00',
        'day' => 'M',
        'room' => 'TBA',
        'code' => 'PS 102',
        'subdesc' => 'INTRODUCTION TO PHILIPPINE POLITICS AND GOVERNANCE',
        'units' => '3'
    ),Array(
        'id' => '4540',
        'classid' => '1609',
        'fromtime' => '16:00:00',
        'totime' => '17:00:00',
        'day' => 'M',
        'room' => '205',
        'code' => 'CFE 3',
        'subdesc' => 'CATHOLIC FOUNDATION OF MISSION',
        'units' => '3'
    ))

这是我的结果集中的计划数组,如果有冲突计划,它将重叠每个行跨并显示冲突计划的信息。我无法在表格中绘制结果集。任何帮助将不胜感激提前感谢

它允许计划重叠,并且仍将在表格中显示为合并的表格单元格。带有红色单元格的图像表示 2 个对象发生冲突且日程相同

【问题讨论】:

  • 您的问题不清楚。说清楚!
  • 我添加了我想要的结果的图像
  • 仅仅向我们展示您想要的,是不够的。到目前为止,我还没有看到任何实际上会动态创建表的代码,那在哪里?您正在确定一些 $rowspan 值 - 很好,之后您 用该值做什么
  • 我很想提供更多代码,但我真的坚持了好几天,想知道如何在表格中动态显示它
  • 为什么不在fullcalendar.io中使用像fullcalendarjs这样的javascript库

标签: php html


【解决方案1】:

我想您的问题是如何在该周表中绘制给定数据。 首先,您必须创建另一组数组数据,以便您更轻松地对其进行循环。

由于您有固定的日期和时间,您可以通过两种方式阅读它:

  1. 包含设定时间的天数数组
  2. 其中包含设定日期的时间数组

下面是最终数据结构的示例,您将使用它来循环和生成表数据。

以时间为键的数组数据:

$formatted_data1 = array( 
"sunday" => 
   array( "7:00:00" => <data here>, 
         "7:30:00" => <data here>
         ..."21:30:00"=> <data> )
"monday" => 
   array( and so on..)
)

以时间为键的数组数据:

$formatted_data1 = array( 
    "7:00:00" => 
       array( "Monday" => <data here>, 
             "Tuesday" => <data here>
             ..."Sunday"=> <data here> )
    "7:30:00" => 
       array( "Monday" => <data here>,
        and so on..)
    )

我建议选择第一个选项,因为水平绘图更容易,这将来自您的样本数据并继续每天迭代以在您的表格中绘图。

【讨论】:

    【解决方案2】:
    1. 按开始时间排序
    2. 按星期几重新排列数组
    $arr["M"] = [{
     fromtime: 1400,
     totime: 1530,
     subject: "foo"
    }, {
      fromtime: 1430,
      totime: 1630,
      subject: "bar"
    }]
    
    1. 迭代和比较两个时间范围 foo(f1, t1) bar(f2​​, t2) 如果 f2 >= f1 并且 f2
    $merged["M"] = [{
     fromtime: 1400,
     totime: 1630,
     subject: "foo bar"
    }]
    

    有关合并代码,请参阅 Algorithm to combine / merge date ranges

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多