我有一些结果,例如:
10:00 - 10:00
11:00 - 11:00
12:00 - 12:00
13:00 - 13:00
17:00 - 17:00
18:00 - 18:00
19:00 - 19:00
20:00 - 20:00
我想把所有这些时间范围合并成一个或多个时间范围。所以在这种情况下,输出必须是:
10:00 - 13:00
17:00 - 20:00
我尝试将所有这些结果推到一个数组中,然后检查每个数组值,如果最后一个数组值与当前数组值相同- 60*60(一个小时),如果是->合并时间
但是使用这个方法我不能得到2个或更多的时间范围。
有人知道吗?
EDIT NEW:我为自己找到了答案。
对于那些想知道我是怎么做到的人。
- 获取所有时间
- 检查上次时间是否等于当前时间- 1小时(因此它将是下一个小时)
- 如果是-->删除最后一个数组值
- 如果不是->这将意味着有一个最小2小时的差距,所以关闭时间范围(推最后一个数组值) 现在你有一个包含所有时间范围的数组
- 使用for循环来计数(数组)次数,将数组切片为2。
- 然后是具体的时间范围。
Array ( [0] => 04:00 [1] => 04:00 [2] => 09:00 [3] => 14:00 [4] => 18:00 [5] => 20:00 )
我很不擅长解释,我很抱歉。我现在的代码:
$last_v = null;
$array_times = array();
——$van_besch =数据库获取值——
if (strtotime($last_v) == (strtotime($van_besch) - 60*60)) {
array_pop($array_times);
}else{
array_push($array_times, $van_besch);
}
$last_v = $van_besch;
array_push($array_times, $van_besch);
如果每个值都被压入数组。分割数组:
for ($i =0; $i < count($array_times); $i = $i + 2) {
$new_array_1 = array_slice($array_times, $i, 2);
$van_new = $new_array_1[0];
$tot_new = $new_array_1[1];
if (strtotime($van) <= strtotime($tot) && strtotime($van_new) <= strtotime($tot_new) && strtotime($van) < strtotime($tot_new) && strtotime($tot) > strtotime($van_new)) {
$error ='<div style="background-color:#ffccba; border:2px solid #d63301; border-radius:3px; color:#d63301; padding:5px;">Tijd '.$van_new.' - '.$tot_new.' niet beschikbaar!</div>';
}
}
我很高兴我自己找到了解决办法(: