这是给我的:
$openinghours = ['09:00-18:00'];
现在可以有多个“封闭时间”,例如:
$closed[] = '11:30-12:15';
$closed[] = '16:00-16:30';
我需要获取新的开放时间,如下所示:
$openinghours = ['09:00-11:30,'12:15-16:00','16-30-18:00'];
因此,它现在具有关闭时间的间隔。
我从哪里开始?我对如何计算它并获得预期结果感到茫然。
答案 0 :(得分:1)
通过分解连字符上的所有时间范围,您可以手动拼合打开/关闭时间。
对于您的项目数据,我的解决方案可能不够健壮。我的解决方案不执行验证,不对闭合范围进行排序,也不检查范围是否与打开/关闭时间匹配或超过打开/关闭时间。我的代码片段严重依赖可信赖的数据。
代码:(Demo)
$openinghours = ['09:00-18:00'];
$closed[] = '11:30-12:15';
$closed[] = '16:00-16:30';
[$start, $end] = explode('-', $openinghours[0]);
foreach ($closed as $span) {
[$shut, $reopen] = explode('-', $span);
$result[] = $start . '-' . $shut;
$start = $reopen;
}
$result[] = $start . '-' . $end;
var_export($result);
输出:
array (
0 => '09:00-11:30',
1 => '12:15-16:00',
2 => '16:30-18:00',
)
如果您的php版本不支持数组解构,则可以用list()
调用explode()
。
答案 1 :(得分:0)
这可能不是实现此目标的最快方法,但是您可以working here看到它。
$openingHours = ['09:00-18:00'];
$closedHours = ['11:30-12:15', '16:00-16:30'];
$openStart = explode("-", $openingHours[0])[0]; # 09:00
$openFinish = explode("-", $openingHours[0])[1]; # 18:00
$hours = [];
foreach($closedHours as $closed)
$hours[] = explode('-', $closed);
$dynamicHours = ["{$openStart}-"];
for($i = 0; $i <= count($hours) -1; $i++) {
$dynamicHours[$i] .= $hours[$i][0];
$dynamicHours[] = "{$hours[$i][1]}-";
}
$dynamicHours[count($dynamicHours) -1] .= $openFinish;
var_dump($dynamicHours);
这会给您输出
array(3) {
[0]=>
string(11) "09:00-11:30"
[1]=>
string(11) "12:15-16:00"
[2]=>
string(11) "16:30-18:00"
}