['min_range' => -1]])) { throw new InvalidArgumentException('the column count must an integer greater or equals to -1'); } $this->detect_columns_count = false; $this->columns_count = $value; } /** * Column count getter * * @return int */ public function getColumnsCount() { return $this->columns_count; } /** * The method will set the $columns_count property according to the next inserted row * and therefore will also validate the next line whatever length it has no matter * the current $columns_count property value. * */ public function autodetectColumnsCount() { $this->detect_columns_count = true; } /** * Is the submitted row valid * * @param array $row * * @return bool */ public function __invoke(array $row) { if ($this->detect_columns_count) { $this->columns_count = count($row); $this->detect_columns_count = false; return true; } if (-1 == $this->columns_count) { return true; } return count($row) === $this->columns_count; } }