需求:需要计算这个时间数组的最大连续天数,9号到11号有连续三天,但是12号断开了,15号到18是一个连续的四天,所以计算结果应该是最大连续天数是 4 天.
$dates = [
'2018-10-09',
'2018-10-10',
'2018-10-11',
'2018-10-13',
'2018-10-15',
'2018-10-16',
'2018-10-17',
'2018-10-18',
];
方法封装
/**
* 求出最大连续天数
*/
if (!function_exists("continue_days")){
function continue_days($time_array=null){
$list_length = count($time_array);
$continue_days = 1;
$continue_days_array = [];
for($i = 0;$i < $list_length;$i++){
$today = strtotime($time_array[$i]);
if($i == $list_length -1){
$continue_days_array[] = $continue_days;
}else{
$yesterday = strtotime($time_array[$i + 1]);
$one_day = 24 * 3600;
if($today - $yesterday == $one_day){
$continue_days += 1;
}else{
$continue_days_array[] = $continue_days;
$continue_days = 1;
}
}
}
if (count($continue_days_array) > 0){
$max_days = max($continue_days_array);
}else{
$max_days = 0;
}
return $max_days;
// var_dump($continue_days_array);
}
}
使用示例
$router->get('/', function () use ($router) {
$dates = [
'2018-10-09',
'2018-10-10',
'2018-10-11',
'2018-10-13',
'2018-10-15',
'2018-10-16',
'2018-10-17',
'2018-10-18',
];
dd(continue_days(array_reverse($dates)));
});