<?php
$dates=[
'2017-02-28', // group1
'2017-03-01', // group1
'2017-04-03', // group2
'2017-04-04', // group2
'2017-04-06', // group3
'2017-04-08', // group4
'2017-04-09', // group4
'2017-04-10' // group4
];
foreach($dates as $date){
if(!isset($start_date)){
$start_date=$date; // temporarily store new start date
}elseif($date==date("Y-m-d",strtotime("$start_date +1 day")) || (isset($end_date) && $date==date("Y-m-d",strtotime("$end_date +1 day")))){
$end_date=$date; // temporarily store new or overwrite existing end date
}else{
$result[]="$start_date to ".(!isset($end_date)?$start_date:$end_date); // current date is not in group, move temporary dates to result array
$start_date=$date; // overwrite previous start date
unset($end_date); // destroy previous end date
}
}
$result[]="$start_date to ".(!isset($end_date)?$start_date:$end_date); // move temporary dates to result array
var_export($result);