2009-11-05 2 views
2

Я ищу помощь в написании сценария, чтобы найти следующий доступный временной интервал.PHP - Найдите следующий доступный временной интервал

Ex: Человек А хочет назначение и доступны временные интервалы каждый день это 9 утра, 12 вечера, 4 вечера, 6 вечера, 9 вечера

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

$apts = array(
     'Person 1' => '1/1/09-9:00', 
     'Person 2' => '1/1/09-12:00', 
     'Person 3' => '1/1/09-18:00', 
     'Person 4' => '1/1/09-21:00' 
     ); 

Итак, мне нужно найти следующий временной интервал для Person А против $ Apts, и он должен прийти с 4 вечера (1/1/09-16: 00). Затем идет персонаж B, а следующий временной интервал для него должен быть «1/2/09-9: 00», так как на 1/1/09 больше нет временных интервалов, поэтому на следующий день перейдите на 9 утра.

С этого момента? Спасибо!

+0

Как вы определяете возможные временные интервалы (т. Е. С учетом праздников и т. Д.)? т. е. у вас есть другой массив с этой информацией или вы планируете просто его кодировать? – jheddings

+0

Просто введите код. Не принимайте во внимание какие-либо особые события или что-то еще. – Shawn

+0

Звучит как проблема, легко решаемая базой данных. – Myles

ответ

1

База данных будет лучшим решением, семантически говорящим. Если вы хотите использовать одну таблицу со столбцами time и person_id, где time кодируется в UNIX времени (легко адаптируются в другие форматы, хотя), вы можете просто хотите запустить:

SELECT time FROM table WHERE person_id = 0 AND time > 1234567890 LIMIT 1; 

Сохраняя исходное PHP только решение , семантически разумное решение может состоять только в том, чтобы запустить цикл while для поиска следующего доступного временного интервала.

$timeslot = $desired_timeslot; 
while(in_array($timeslot, $apts)) { 
    $timeslot = get_next_timeslot($timeslot); 
} 
return $timeslot; 

Конечно, вы должны определить функцию get_next_timeslot() в соответствии с вашим кодированием/организующий методом.

+1

не используют временные метки unix в вашей базе данных, это затрудняет выполнение обычных запросов. если вы когда-либо захотите выбрать правильное время datetime как временную метку unix, используйте UNIX_TIMESTAMP (столбец) – Kris

Смежные вопросы