function __construct(array $shiftObjs) { $this->drivers = array(); /** @var Shift $shift */ foreach ($shiftObjs as $shift) { /** @var DrivingAssertion $drivingAssertion */ foreach ($shift->getDrivingAssertions() as $drivingAssertion) { /** @var Driver $driver */ $driver = $drivingAssertion->getDriver(); $id = $driver->getId(); if (array_key_exists($id, $this->drivers)) { /** @var DispositionResourcesDTO $dto */ $dto = $this->drivers[$id]; } else { $dto = new DispositionResourcesDTO($driver); } $dto->addShift($shift); $dto->addDrivingAssertion($drivingAssertion); $this->drivers[$id] = $dto; } } shuffle($this->drivers); // randomize sort order of drivers array }