需要写一段合并时间区间的代码,写个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);
先将数组中元素按照起始时间排序,再遍历数组判断时间区间之间是否有重合的部分,如有则合并时间区间,如没有则将新的时间区间放入
标签:合并,cross,item,range,&&,time,区间,php,row From: https://www.cnblogs.com/caroline2016/p/18170037