答案中不需要实际代码,只有最佳实践的好建议。
我需要在 Bootstrap 网站上显示一周时间表(1 小时时隙)以用于预订目的。时间段将具有以下状态之一:
- 可用:绿色背景和“可用”文本,
- 已预订:红色背景和“已占用”文本,
- 不可预订:灰色背景和“不可用”文字。
当用户单击可用时间段时,将出现一个模式/弹出窗口以进行预订。
仅显示一周(= 当前周)。最终,用户可以单击箭头并查看下周时间表。所以,我不需要显示超过当前和下周的内容。
我想到了三种可能的解决方案:
为每个可用的时间段创建一个带有一条记录的 MySQL 表(使用 cronjob 自动)。这样我就可以在前端打印表格数据。注意:如果您在网站上有很多时间表,我已经完成了这项工作并且效果很好但不是最佳的。
使用 jQuery 插件(如 Fullcalendar)。显然,即使我需要的东西非常简单,Fullcalendar(或其他日历插件)也不适合这种用途。即使有很多定制,你也不能这样做。
in_array()
使用该函数使用 PHP 动态构建时间表。这个想法是创建两个 MySQL 表,一个用于存储不可用的时间,另一个用于保留。通过两个简单的查询,我可以获得 2 个数组(当前显示的一周):“non_available_timeslots”和“reservations”。
当我建立周时间表(正常引导表)时,对于每个时间段,我将控制两件事:
a) 如果天/小时在“non_available_timeslots”数组中(如果是
echo '<td class="not-available">Not available</td>'
.....否则继续指向 b)
b) 如果日期/小时在“预订”数组中(如果是,echo '<td class="booked">Occupied</td>'
.....else 继续点 c)
c) 如果以上 2 个条件不匹配,echo '<td class="available"> Available</td>'
如您所见,我想要做的非常简单。我对解决方案 3 感兴趣。
从性能的角度来看,是不是很糟糕?(请注意,在 in_array 函数中搜索的绝对最大元素数将等于时间表中的时隙数,因此 15x7= 105,但实际上可能只有 50)。