time = $time; $var = new Variation($time); foreach($time as $entity) $var->addEntity($entity, null); $this->data[] = $var; foreach ($t as $time) { $var = new Variation($time); foreach($time as $entity) $this->match($var, $entity); if (!$var->isEmpty()) $this->data[] = $var; } array_shift($this->data); } private function match(Variation $var, DiffInterface $entity): void { foreach(array_reverse($this->data) as $data) { foreach ($data as $dentity) { if ($entity instanceof $dentity) { if ($entity->diff($dentity)) $var->addEntity($entity, $dentity); return; } } } } public function getTime(): Time { return $this->time; } /** * Returns the changes in the forecast * * @todo implement filter function * @return array */ public function getData(callable $filterFn = null): array { return $this->data; } }