Convert CSV to array/Iterator (Excel style is fully suppoted!)
As you know, PHP has built-in fgetcsv function.
But has some probrems:
- Line breaks in the cell
- Multibyte string (especially NON UTF-8)
- Double quote in the cell
PHP5.3.3 or later
Create or modify your composer.json
{
"require": {
"kzykhys/php-csv-parser": ">1.4"
}
}And run
$ php composer.phar install1,"some text",150
2,"some multi line
text",2000
<?php
require('./vendor/autoload.php');
$parser = \KzykHys\CsvParser\CsvParser::fromFile('./test.csv');
$result = $parser->parse();
var_dump($result);This is the same as:
<?php
require('./vendor/autoload.php');
$iterator = new \SplFileObject('./test.csv');
$parser = new \KzykHys\CsvParser\CsvParser($iterator);
$result = $parser->parse();
var_dump($result);<?php
require('./vendor/autoload.php');
$parser = \KzykHys\CsvParser\CsvParser::fromString($string);
$result = $parser->parse();
var_dump($result);<?php
require('./vendor/autoload.php');
$parser = \KzykHys\CsvParser\CsvParser::fromArray(array('a,b,c,d', 'e,f,g,h'));
$result = $parser->parse();
$iterator = new ArrayIterator(array('a,b,c,d', 'e,f,g,h'));
$parser2 = new \KzykHys\CsvParser\CsvParser($iterator);
$result2 = $parser2->parse();
var_dump($result);
var_dump($result2);The class \KzykHys\CsvParser\CsvParser itself is Traversable.
so You can convert CSV lines on-the-fly.
Following example is the best choice for performance:
<?php
require('./vendor/autoload.php');
$parser = \KzykHys\CsvParser\CsvParser::fromFile('./test.csv');
foreach ($parser as $record) {
// handles each record
var_dump($record);
}You can pass the options to 2nd argument of each static methods.
- CsvParser::fromFile($file, $options);
- CsvParser::fromString($string, $options);
- CsvParser::fromArray($array, $options);
- new CsvParser($iterator, $options);
Available options are:
| Option | Type | Description | Default |
|---|---|---|---|
| delimiter | string | The field delimiter (one character only) | , |
| enclosure | string | The field enclosure character (one character only) | " |
| encoding | string | The type of encoding | CP932 |
| offset | integer (>=0) | The sequence will start at that offset | 0 |
| limit | integer (>=-1) | Limit maximum count of records | -1 (unlimited) |
| header | array or false | Use the specified index instead of the column number | false |
Just run phpunit (PHPUnit is required)
Kazuyuki Hayashi (@kzykhys)
see CHANGELOG



