public function __construct(array $options = array()) { $defaultOptions = array('delimiter' => ',', 'enclosure' => '"', 'escape' => '\\', 'hasHeader' => true, 'header' => null, 'ignoreMissingRows' => false, 'ignoreMissingColumns' => false, 'combineFirstNRowsAsHeader' => 1, 'skipFirstNRows' => 0); $unknownOptions = array_diff(array_keys($options), array_keys($defaultOptions)); if (count($unknownOptions) != 0) { throw new InvalidArgumentException('Unknown options specified: ' . implode(', ', $unknownOptions)); } if (array_key_exists('header', $options) && null !== $options['header'] && !array_key_exists('hasHeader', $options)) { $options['hasHeader'] = false; } if (array_key_exists('ignoreMissingRows', $options)) { $options['ignoreMissingColumns'] = $options['ignoreMissingRows']; } $this->options = array_merge($this->options, $defaultOptions, $options); if ($this->options['hasHeader'] || null !== $this->options['header']) { if (null === $this->options['header']) { $it = $this->getLineIteratorWithHeaderInFirstLines(); } else { $i = 0; while ($this->options['skipFirstNRows'] > $i) { $i++; $this->retrieveNextCsvRow(); } $it = $this->getLineIteratorWithHeader($this->options['header']); } } else { $it = $this->getLineIteratorWithoutHeader(); } parent::__construct($it, function ($r) { return $r !== false; }); }
public function __construct(PDO $pdo, $query, $params = array(), $fetchMode = PDO::FETCH_OBJ) { $pdoStatement = null; $it = new CallbackIterator(function () use(&$pdoStatement, $pdo, $query, $params, $fetchMode) { if (null === $pdoStatement) { if (count($params) != 0) { $pdoStatement = $pdo->prepare($query); if (false === $pdoStatement) { throw new Exception('Invalid query'); } $pdoStatement->execute($params); } else { $pdoStatement = $pdo->query($query); } if (false === $pdoStatement) { throw new Exception('Invalid query'); } $pdoStatement->setFetchMode($fetchMode); } return $pdoStatement->fetch(); }); parent::__construct($it, function ($r) { return $r !== false; }); }
public function __construct($file, $options = array()) { $defaultOptions = array('includeWhitespace' => false, 'fromEncoding' => null); $unknownOptions = array_diff(array_keys($options), array_keys($defaultOptions)); if (count($unknownOptions) != 0) { throw new InvalidArgumentException('Unknown options specified: ' . implode(', ', $unknownOptions)); } $options = (object) array_merge($defaultOptions, $options); if (is_resource($file)) { $this->fileHandle = $file; $this->closeFileHandleOnDestruct = false; if (null !== $options->fromEncoding) { throw new Exception('Source encoding can only be specified if constructed with file path'); } } else { if (is_string($file)) { $this->fileHandle = @fopen($file, 'r'); if ($this->fileHandle === false) { throw new InvalidArgumentException("Could not open file with path: '{$file}'"); } if (null !== $options->fromEncoding) { stream_filter_append($this->fileHandle, 'convert.iconv.' . $options->fromEncoding . '/UTF-8'); } $this->closeFileHandleOnDestruct = true; } else { throw new InvalidArgumentException('You must provide either a stream or filename to the file line iterator, you provided a ' . gettype($file)); } } $fileHandle = $this->fileHandle; $lineIterator = new CallbackIterator(function () use($fileHandle, $options) { $line = fgets($fileHandle); if ($line !== false && !$options->includeWhitespace) { $line = rtrim($line, "\r\n"); } return $line; }); parent::__construct($lineIterator, function ($line) { return $line !== false; }); }