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 install
1,"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