php - 在两个小时的插槽中溢出数组
问题描述
我正在研究一个免费的约会时间段。我坚持创建正确的 spilts 数组并显示可用的时隙。
我想从开始时间和结束时间开始可能会进入 2 小时的时段。
foreach ( $period as $dt ){
$m = [
'start'=>date('Y-m-d ',strtotime($dt->format('Y-m-d').' -1
day')).$max,
'end'=>$dt->format('Y-m-d ').$min
];
foreach($free as $k=>$f){
if($m['start']>$f['start'] && $m['start']<=$f['end']){
$free[$k]['end'] = $m['start'];
if($m['end']<$f['end'])
$free[] = ['start'=>$m['end'], 'end'=>$f['end']];
}
elseif($m['end']<$f['end'] && $m['end']>$f['start']){
$free[$k]['start'] = $m['end'];
}
}
}
例如,上面的会议时间数组应该产生以下空闲时间数组:
Array
(
[0] => Array
(
[start] => 2019-05-08 07:00:00
[end] => 2019-05-08 17:00:00
)
[1] => Array
(
[start] => 2019-05-09 11:25:00
[end] => 2019-05-09 12:40:00
)
[2] => Array
(
[start] => 2019-05-09 14:15:00
[end] => 2019-05-09 14:30:00
)
[3] => Array
(
[start] => 2019-05-10 07:00:00
[end] => 2019-05-10 17:00:00
)
[4] => Array
(
[start] => 2019-05-09 07:00:00
[end] => 2019-05-09 07:40:00
)
[5] => Array
(
[start] => 2019-05-11 07:00:00
[end] => 2019-05-11 17:00:00
)
)
预期输出:
Array
(
[0] => Array
(
[0] => Array(
[start] => 2019-05-08 07:00:00
[end] => 2019-05-08 09:00:00
)
[1] => Array(
[start] => 2019-05-08 09:00:00
[end] => 2019-05-08 11:00:00
)
[2] => Array(
[start] => 2019-05-08 11:00:00
[end] => 2019-05-08 13:00:00
)
[3] => Array(
[start] => 2019-05-08 13:00:00
[end] => 2019-05-08 15:00:00
)
[4] => Array(
[start] => 2019-05-08 15:00:00
[end] => 2019-05-08 17:00:00
)
)
[1] => Array
(
[start] => 2019-05-09 11:25:00
[end] => 2019-05-09 12:40:00
)
.. 很快 ...
解决方案
我建议使用 \DateTime,它使用起来很舒服
<?php
$start = new \DateTime('2019-05-08 07:00:00');
$end = new \DateTime('2019-05-08 07:30:00');
function getSlots(\DateTime $start, \DateTime $end): array
{
$slots = [];
while ($start < $end) {
$old = clone($start);
$start->modify('+2 hours');
if ($start > $end) {
echo 1;
$slots[] = [
'from' => $old,
'to' => $end
];
return $slots;
} else {
$slots[] = [
'from' => $old,
'to' => clone($start)
];
}
}
return $slots;
}
var_dump(getSlots($start, $end));
你可以在那里试试https://3v4l.org/qAatj
推荐阅读
- c# - Can I inherit from an existing asp.net control from a custom user control?
- c# - 如果条件为真,则使用类中的布尔逻辑来触发计时器
- javascript - 打字稿和本机反应的 ForwardRef 错误
- regex - 法律引用的正则表达式
- azure - How do I create hierarchical data structures in Azure Key Vaults
- github - Github 回复“存储库无法完成”
- machine-learning - 神经网络如何学习函数而不是记忆函数?
- matlab - matlab中的MFCC代码
- reactjs - React, Apollo - 更新和移除突变问题
- python - get a value from another column if condition for this column is met