예제 #1
0
 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;
     });
 }
예제 #2
0
 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;
     });
 }
예제 #3
0
 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;
     });
 }