周时间表:PHP in_array 或 jQuery 插件
Week timetable: PHP in_array or jQuery plugin
答案中不需要实际代码,只需要最佳实践的好建议。
我需要在 Bootstrap 网站上显示一周的时间 table(1 小时时间段)以供预订。时间段将具有以下状态之一:
- 可用:绿色背景和 'available' 文字,
- 已预订:红色背景和 'occupied' 文字,
- 不可预订:灰色背景和 'not available' 文字。
当用户点击可用时间段时,将出现 modal/popup 以供预订。
只显示一周(=当前一周)。最终用户可以点击箭头查看下周时间table。所以,我不需要显示比当前和下周更多的内容。
我想到了三种可能的解决方案:
创建一个 MySQL table,每个可用时间段都有一条记录(自动使用 cronjob)。这样我就可以在前端打印 table 数据。 注意:我已经这样做了,效果很好,但如果您在网站上有很多时间table,则不是最佳选择。
使用 jQuery 插件(如 Fullcalendar)。显然,即使我需要的是超级简单的,Fullcalendar(或其他日历插件)也不适合这种用途。即使有很多定制,你也不能这样做。
使用 in_array()
函数与 PHP 动态构建时间 table。
这个想法是创建两个 MySQL tables,一个用于存储非可用时间,另一个用于预订。
通过两个简单的查询,我可以获得 2 个数组(针对当前显示的一周):'non_available_timeslots' 和 'reservations'。
当我构建周时间table(正常bootstrap table)时,对于每个时间段我将控制两件事:
a) 如果 day/hour 在 'non_available_timeslots' 的数组中(如果是
echo '<td class="not-available">Not available</td>'
.....else继续点b)
b) 如果 day/hour 在 'reservations' 的数组中(如果是这样,
echo '<td class="booked">Occupied</td>'
.....else继续点c)
c) 如果以上2个条件都不符合,
echo '<td class="available"> Available</td>'
如你所见,我想做的事情非常简单。 我对解决方案 3 感兴趣。
从性能的角度来说,是不是很差? (请注意,in_array 函数中要搜索的绝对最大元素数等于时间 table 中的时隙数,因此 15x7= 105,但实际上可能只有 50 个)。
根据您的 post,您已经决定了要使用的解决方案。鉴于此,我只会创建一个 table,其列 (status
) 对于 "Not available" 和 "Occupied" 是不同的。
我只会使用一个 table 因为您可能在几天/几周/几个月后需要另一个状态。您总是可以拥有多个数组,其值来自相同的 table.
我认为您不必考虑那么多行(或时隙)的性能。我说:随它去吧,随着你的应用程序的成长而调整。
答案中不需要实际代码,只需要最佳实践的好建议。
我需要在 Bootstrap 网站上显示一周的时间 table(1 小时时间段)以供预订。时间段将具有以下状态之一:
- 可用:绿色背景和 'available' 文字,
- 已预订:红色背景和 'occupied' 文字,
- 不可预订:灰色背景和 'not available' 文字。
当用户点击可用时间段时,将出现 modal/popup 以供预订。
只显示一周(=当前一周)。最终用户可以点击箭头查看下周时间table。所以,我不需要显示比当前和下周更多的内容。
我想到了三种可能的解决方案:
创建一个 MySQL table,每个可用时间段都有一条记录(自动使用 cronjob)。这样我就可以在前端打印 table 数据。 注意:我已经这样做了,效果很好,但如果您在网站上有很多时间table,则不是最佳选择。
使用 jQuery 插件(如 Fullcalendar)。显然,即使我需要的是超级简单的,Fullcalendar(或其他日历插件)也不适合这种用途。即使有很多定制,你也不能这样做。
使用
in_array()
函数与 PHP 动态构建时间 table。 这个想法是创建两个 MySQL tables,一个用于存储非可用时间,另一个用于预订。通过两个简单的查询,我可以获得 2 个数组(针对当前显示的一周):'non_available_timeslots' 和 'reservations'。
当我构建周时间table(正常bootstrap table)时,对于每个时间段我将控制两件事:
a) 如果 day/hour 在 'non_available_timeslots' 的数组中(如果是
echo '<td class="not-available">Not available</td>'
.....else继续点b)
b) 如果 day/hour 在 'reservations' 的数组中(如果是这样,echo '<td class="booked">Occupied</td>'
.....else继续点c)
c) 如果以上2个条件都不符合,echo '<td class="available"> Available</td>'
如你所见,我想做的事情非常简单。 我对解决方案 3 感兴趣。
从性能的角度来说,是不是很差? (请注意,in_array 函数中要搜索的绝对最大元素数等于时间 table 中的时隙数,因此 15x7= 105,但实际上可能只有 50 个)。
根据您的 post,您已经决定了要使用的解决方案。鉴于此,我只会创建一个 table,其列 (status
) 对于 "Not available" 和 "Occupied" 是不同的。
我只会使用一个 table 因为您可能在几天/几周/几个月后需要另一个状态。您总是可以拥有多个数组,其值来自相同的 table.
我认为您不必考虑那么多行(或时隙)的性能。我说:随它去吧,随着你的应用程序的成长而调整。