getNumberOfParameters(); } } /** * Adds multiple lines to the CSV document * * a simple wrapper method around insertOne * * @param Traversable|array $rows a multidimensional array or a Traversable object * * @throws InvalidArgumentException If the given rows format is invalid * * @return static */ public function insertAll($rows) { if (!is_array($rows) && !$rows instanceof Traversable) { throw new InvalidArgumentException( 'the provided data must be an array OR a `Traversable` object' ); } foreach ($rows as $row) { $this->insertOne($row); } return $this; } /** * Adds a single line to a CSV document * * @param string[]|string $row a string, an array or an object implementing to '__toString' method * * @return static */ public function insertOne($row) { if (!is_array($row)) { $row = str_getcsv($row, $this->delimiter, $this->enclosure, $this->escape); } $row = $this->formatRow($row); $this->validateRow($row); if (null === $this->csv) { $this->csv = $this->getIterator(); } static::$fputcsv->invokeArgs($this->csv, $this->getFputcsvParameters($row)); if ("\n" !== $this->newline) { $this->csv->fseek(-1, SEEK_CUR); $this->csv->fwrite($this->newline); } return $this; } /** * returns the parameters for SplFileObject::fputcsv * * @param array $fields The fields to be add * * @return array */ protected function getFputcsvParameters(array $fields) { $parameters = [$fields, $this->delimiter, $this->enclosure]; if (4 == static::$fputcsv_param_count) { $parameters[] = $this->escape; } return $parameters; } /** * {@inheritdoc} */ public function isActiveStreamFilter() { return parent::isActiveStreamFilter() && null === $this->csv; } /** * {@inheritdoc} */ public function __destruct() { $this->csv = null; parent::__destruct(); } }