Недельное расписание: PHP in_array или плагин jQuery

Никакой фактический код не требуется в ответах, только хорошие советы для лучших практик.

Что мне нужно, так это отображать расписание на неделю (1 час) на веб-сайте Bootstrap для бронирования. Временной интервал будет иметь один из следующих статусов:

  • Доступно: зеленый фон и «доступный» текст,
  • Уже забронированы: красный фон и «занятый» текст,
  • Недоступно для бронирования: серый фон и текст «недоступен».

Когда пользователь нажимает на доступный временной интервал, для бронирования появится модальное / всплывающее окно.

Отображается только одна неделя (= текущая неделя). В конце концов пользователь может нажать на стрелку и просмотреть расписание на следующую неделю. Таким образом, мне не нужно отображать больше, чем текущая и следующая неделя.

Я подумал о трех возможных решениях:

  1. Создайте таблицу MySQL с одной записью для каждого доступного временного интервала (автоматически с помощью cronjob). Таким образом, я могу просто напечатать данные таблицы в веб-интерфейсе. Примечание: я уже сделал это и отлично работает, но не оптимально, если у вас много расписаний на сайте.

  2. Используйте плагин jQuery (например, Fullcalendar). Очевидно, даже если мне нужно что-то сверхпростое, Fullcalendar (или другие плагины календаря) не предназначены для такого использования. Даже с большим количеством настроек вы не можете сделать это.

  3. Построить расписание динамически с помощью PHP, используя in_array() функция.
    Идея состоит в том, чтобы создать две таблицы MySQL, одну для хранения недоступных часов, а другую для резервирования.

    С помощью двух простых запросов я могу получить 2 массива (для текущей недели): «non_available_timeslots» и «reservations».

    Когда я строю расписание на неделю (обычная таблица начальной загрузки), для каждого временного интервала я буду контролировать 2 вещи:

    а) Если день / час находится в массиве non_available_timeslots (если так

    echo '<td class="not-available">Not available</td>'
    

    …..иначе продолжайте в пункт б)
    б) если день / час находится в массиве «резервирований» (если так,

    echo '<td class="booked">Occupied</td>'
    

    …..иначе продолжайте указывать в)
    c) если 2 вышеуказанных условия не соответствуют,

    echo '<td class="available"> Available</td>'
    

Как видите, то, что я хочу сделать, действительно просто. Я заинтересован в решении 3.

С точки зрения производительности, это плохо? (Обратите внимание, что абсолютное максимальное количество элементов для поиска в функции in_array будет равно количеству временных интервалов в расписании, поэтому 15×7 = 105, но в действительности, вероятно, только 50).

2

Решение

Из своего поста вы уже решили, какое решение будете использовать. Учитывая это, я бы создал только одну таблицу со столбцом (status) это будет отличаться для «Не доступно» и «Занят».

Я бы использовал только одну таблицу, потому что вам может понадобиться другой статус через несколько дней / недель / месяцев. Вы всегда можете иметь более одного массива со значениями из одной и той же таблицы.

Я не думаю, что вы должны учитывать производительность с таким количеством строк (или временных интервалов). Я говорю: иди с этим и настраивайся по мере роста твоего приложения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]