Events = $this->_getEventGroups($this->Events); // initial sort events are going to be re-sorted after assigning grid priorities usort($this->Events, ['GridEventGroupDTO', '__compare']); } private function _getEventGroups(array $events) { $clusters = []; foreach ($events as $event) { if (!isset($clusters[$event->Calendar->ID])) { $clusters[$event->Calendar->ID] = []; } $clusters[$event->Calendar->ID][] = $event; } return array_map( function($cluster) { return new GridEventGroupDTO($cluster); }, $clusters ); } } ?>