周时间表:PHP in_array 或 jQuery 插件

Week timetable: PHP in_array or jQuery plugin

答案中不需要实际代码,只需要最佳实践的好建议。

我需要在 Bootstrap 网站上显示一周的时间 table(1 小时时间段)以供预订。时间段将具有以下状态之一:

当用户点击可用时间段时,将出现 modal/popup 以供预订。

只显示一周(=当前一周)。最终用户可以点击箭头查看下周时间table。所以,我不需要显示比当前和下周更多的内容。

我想到了三种可能的解决方案:

  1. 创建一个 MySQL table,每个可用时间段都有一条记录(自动使用 cronjob)。这样我就可以在前端打印 table 数据。 注意:我已经这样做了,效果很好,但如果您在网站上有很多时间table,则不是最佳选择。

  2. 使用 jQuery 插件(如 Fullcalendar)。显然,即使我需要的是超级简单的,Fullcalendar(或其他日历插件)也不适合这种用途。即使有很多定制,你也不能这样做。

  3. 使用 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.

我认为您不必考虑那么多行(或时隙)的性能。我说:随它去吧,随着你的应用程序的成长而调整。