2

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

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

  • 可用:绿色背景和“可用”文本,
  • 已预订:红色背景和“已占用”文本,
  • 不可预订:灰色背景和“不可用”文字。

当用户单击可用时间段时,将出现一个模式/弹出窗口以进行预订。

仅显示一周(= 当前周)。最终,用户可以单击箭头并查看下周时间表。所以,我不需要显示超过当前和下周的内容。

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

  1. 为每个可用的时间段创建一个带有一条记录的 MySQL 表(使用 cronjob 自动)。这样我就可以在前端打印表格数据。注意:如果您在网站上有很多时间表,我已经完成了这项工作并且效果很好但不是最佳的。

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

  3. 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)。

4

1 回答 1

1

从您的帖子中,您已经决定了要使用的解决方案。鉴于此,我将只创建一个表,其中的列 ( status) 对于“不可用”和“已占用”将是不同的。

我只会使用一张桌子,因为您可能需要几天/几周/几个月后的另一个状态。您始终可以拥有多个数组,其中包含来自同一张表的值。

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

于 2015-03-06T15:32:06.177 回答