from = $from; $this->to = $to; } } class OpenDay { public $day; public $openAt; public function __construct($day, $openAt) { $this->day = $day; $this->openAt = $openAt; } } function aggregate($open) { $res = array(); $first = $open[0]->day; for($i = 1; $i < 7; $i++) { if(($open[$i]->openAt->to != $open[$i-1]->openAt->to) || ($open[$i]->openAt->from != $open[$i-1]->openAt->from)) { $last = $open[$i-1]->day; $res[] = new OpenDay($first . '-' .$last, $open[$i-1]->openAt); $first = $open[$i]->day; } } $last = $open[6]->day; $res[] = new OpenDay($first . '-' .$last, $open[6]->openAt); return $res; } $open = array(); $open[] = new OpenDay('Monday', new Interval('05:30', '22:00')); $open[] = new OpenDay('Tuesday', new Interval('05:30', '22:00')); $open[] = new OpenDay('Wednesday', new Interval('05:30', '22:00')); $open[] = new OpenDay('Thursday', new Interval('05:30', '22:00')); $open[] = new OpenDay('Friday', new Interval('05:30', '22:00')); $open[] = new OpenDay('Saturday', new Interval('06:30', '22:00')); $open[] = new OpenDay('Sunday', new Interval('06:30', '22:00')); print_r($open); $aggropen = aggregate($open); print_r($aggropen); ?>