123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- namespace App\Yr\Forecast\Tabular;
- use App\Yr\Forecast\Tabular\Time\DiffInterface;
- use App\Yr\Forecast\Tabular\Variation\Variation;
- /**
- * Removes superfluous forecast data in an Time-object
- * only storing changes.
- *
- * @author Joachim M. Giæver (joachim[]giaever.org)
- */
- class Variations {
- private $time;
- private $data = [];
- /**
- * @param array $t Array of Time-objects
- */
- public function __construct(array $t) {
- $time = array_shift($t);
- if (!$time instanceof Time)
- return;
- $this->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;
- }
- }
|