PHP csv 函数的面向对象包装器,具有列映射,易于代码维护。

v0.5.2 2021-09-20 11:15 UTC

This package is auto-updated.

Last update: 2024-09-20 19:30:04 UTC


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
)
...