php合并时间区间
需要写一段合并时间区间的代码,写个demo记录下
<?php
$arr = [
["2024-04-16 11:25:46", "2024-04-16 12:19:21"],
["2024-04-16 03:14:06", "2024-04-16 10:13:21"],
["2024-04-16 13:14:59", "2024-04-16 15:44:46"],
["2024-04-16 12:19:21", "2024-04-16 13:58:30"],
["2024-04-16 13:58:30", "2024-04-16 15:08:37"],
["2024-04-16 04:33:52", "2024-04-16 10:12:47"],
["2024-04-16 03:44:18", "2024-04-16 10:44:23"]
];
function handleTimeRange($arr)
{
usort($arr, function ($a, $b) {
return strtotime($a[0]) - strtotime($b[0]);
});
$time_range = [];
foreach ($arr as $row) {
$flag_cross = false;
foreach ($time_range as $i => $item) {
if ($row[0] < $item[0] && $row[1] >= $item[0] && $row[1] <= $item[1]) {
$flag_cross = true;
$time_range[$i][0] = $row[0];
} else if ($row[0] >= $item[0] && $row[0] <= $item[1] && $row[1] > $item[1]) {
$flag_cross = true;
$time_range[$i][1] = $row[1];
} else if ($row[0] < $item[0] && $row[1] > $item[1]) {
$flag_cross = true;
$time_range[$i][0] = $row[0];
$time_range[$i][1] = $row[1];
} else if ($row[0] > $item[0] && $row[1] < $item[1]) {
$flag_cross = true;
}
}
if (empty($time_range)) $time_range[] = $row;
if (!$flag_cross && !in_array($row, $time_range)) $time_range[] = $row;
}
return $time_range;
}
echo '<pre>';
$tr = handleTimeRange($arr);
var_dump($tr);
先将数组中元素按照起始时间排序,再遍历数组判断时间区间之间是否有重合的部分,如有则合并时间区间,如没有则将新的时间区间放入
分类:
php
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix