Создание объектов даты и времени для каждого значения в подмассивах временного диапазона не требует дополнительных затрат для вашей задачи.strtotime()
дает вам то, что вам нужно, и только то, что вам нужно.
В качестве наилучшей практики вы должны выполнить досрочное возвращение, как только найдете подходящий диапазон времени - чтобы ваш код не выполнялсярасточительные итерации.
Код: ( Демо )
$array = [
["start" => "Mon 09:30", "end" => "Mon 11:00"],
["start" => "Sun 14:10", "end" => "Sun 20:00"],
["start" => "Sun 07:30", "end" => "Sun 08:00"],
["start" => "Sun 08:30", "end" => "Sun 09:30"]
];
function in_range($array) {
$now = time(); // using server timezone
echo date("D H:i") , "\n";
foreach ($array as $range) {
if ($now >= strtotime($range["start"]) && strtotime($range["end"]) >= $now) {
return $range; // or true if you like
}
}
return false;
}
var_export(in_range($array));
Вывод (на данный момент):
Sun 09:02
array (
'start' => 'Sun 08:30',
'end' => 'Sun 09:30',
)
Если этоневозможно, чтобы разные дневные имена встречались в одной и той же строке данных, поэтому вы можете дополнительно оптимизировать процесс поиска, удалив избыточности в массиве поиска.
Если вы реструктурируете свои дневные строки, которые будут сгруппированы поимя дня и используйте это значение в качестве ассоциативного ключа первого уровня, вы можете использовать isset()
, чтобы предложить быстрый возврат без каких-либо временных сравнений и исключить возможность бесполезной итерации всех остальных дней недели.
Код: ( Демо )
$array = [
"Mon" => [
["start" => "09:30", "end" => "11:00"]
],
"Sun" => [
["start" => "07:30", "end" => "08:00"],
["start" => "08:30", "end" => "09:30"],
["start" => "14:10", "end" => "23:59"]
]
];
function in_range($array) {
$dayname = date("D");
if (!isset($array[$dayname])) {
return false; // quick, 1st level return
}
$now = date("H:i");
foreach ($array[$dayname] as $range) {
if ($now >= $range["start"] && $range["end"] >= $now) {
return true; // quick return
}
}
return false; // fallback return after iterating the dayname group
}
var_export(in_range($array));
Это может быть преждевременной оптимизацией.Я не знаю размер и масштаб вашего проекта.Я просто хотел упомянуть об этом на случай, если проект будущего исследователя сможет извлечь из него пользу.