okneloper / csv
PHP csv 函数的面向对象包装器,具有列映射,易于代码维护。
v0.5.2
2021-09-20 11:15 UTC
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: >=6.0 <=10.0
README
PHP csv 函数的面向对象包装器,具有列映射,易于代码维护。
易于使用和维护使用它的代码
代码可以轻松适应不断变化的需求和输入文件格式。
以世界上体重最大的动物的CSV数据为例,其位置、动物和重量在一行中作为列标题。
<?php use \Okneloper\Csv\Stream\Input\FileStream; use \Okneloper\Csv\CsvReader; // read CSV data from a file $dataSource = new FileStream($file); // creata a reader $csv = new CsvReader($dataSource); // read rows one by one while ($row = $csv->read()) { echo $row->position; // value for the row in column 0 with header 'position' echo $row->animal; // value for the row in column 1 with header 'animal' echo $row->weight; // value for the row in column 2 with header 'weight' echo $row["weight"]; // also supports array syntax }
使用方法
使用CSV文件作为数据源
$dataSource = new \Okneloper\Csv\Stream\Input\FileStream($file);
或者使用包含CSV数据的字符串
$dataSource = new \Okneloper\Csv\Stream\StringStream("position,animal,weight\n1,Blue whale,180 tonnes\n2,African Elephant,6350 kg\n3,Brown Bear,1 ton");
使用数据源创建一个读取器
$csv = new \Okneloper\Csv\CsvReader($dataSource);
读取数据
while ($row = $csv->read()) { print_r($row->toArray()); }
映射数据可以作为数组元素访问
echo $row['position'];
或对象属性
echo $row->position;
列映射
映射到标题
默认情况下,数据映射到标题行。
$csv = new \Okneloper\Csv\CsvReader($dataSource);
输出
Array
(
[position] => 1
[animal] => Blue whale
[weight] => 180 tonnes
)
...
自定义映射
如果您定期处理新的CSV文件,并且列顺序或名称可能会改变,自定义映射有助于处理这种情况
$csv = new \Okneloper\Csv\CsvReader($dataSource, true, ['Nr', 'Who', 'HowMuch']);
Array
(
[Nr] => 1
[Who] => Blue whale
[HowMuch] => 180 tonnes
)
...
无标题
$csv = new \Okneloper\Csv\CsvReader($dataSource, false, ['Nr', 'Who', 'HowMuch']);
Array
(
[Nr] => position
[Who] => animal
[HowMuch] => weight
)
Array
(
[Nr] => 1
[Who] => Blue whale
[HowMuch] => 180 tonnes
)
...
无标题,无映射
$csv = new \Okneloper\Csv\CsvReader($dataSource, false, null);
Array ( [0] => position [1] => animal [2] => weight ) Array ( [0] => 1 [1] => Blue whale [2] => 180 tonnes ) ...