需要写一段合并时间区间的代码,写个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);
先将数组中元素按照起始时间排序,再遍历数组判断时间区间之间是否有重合的部分,如有则合并时间区间,如没有则将新的时间区间放入