missingValue = $missingValue; $this->strategy = $strategy; $this->axis = $axis; $this->samples = $samples; } public function fit(array $samples) { $this->samples = $samples; } public function transform(array &$samples) { foreach ($samples as &$sample) { $this->preprocessSample($sample); } } private function preprocessSample(array &$sample) { foreach ($sample as $column => &$value) { if ($value === $this->missingValue) { $value = $this->strategy->replaceValue($this->getAxis($column, $sample)); } } } private function getAxis(int $column, array $currentSample) : array { if (self::AXIS_ROW === $this->axis) { return array_diff($currentSample, [$this->missingValue]); } $axis = []; foreach ($this->samples as $sample) { if ($sample[$column] !== $this->missingValue) { $axis[] = $sample[$column]; } } return $axis; } }