用PHP读写CSV文件

记事

由于过去几次使用PHP来读写CSV文件,我不知怎么地将其封装成了一个库,并保存了下来。

fgetcsv非常方便,但是仅仅使用它会变得麻烦,因为之后需要遍历数组进行处理。
因此,我将其封装成对象,使得可以一次转换并逐条处理记录的情况下避免编写for循环。

包装

米亚-扎基/ CSVERT

用法

将对象转换

    • 読み込むCSVの構造をRecordクラスを継承して定義。

RecordクラスはArrayAccess, JsonSerializableをimplementsしている

<?php
namespace App;

use MyaZaki\Csvert\Record;

class PostalCode extends Record
{
    public $delimiter = ',';
    public $enclosure = '"';
    public $escape = '\\';

    public $charset = 'SJIS-win';

    public $header = true;

    public $columns = [
        'Code',
        'Street',
        'City',
        'State',
    ];

    public function getAddress()
    {
        return $this->attributes['Street'] . ', ' . $this->attributes['City'] . ', ' . $this->attributes['State'];
    }
}
    parseするとCollectionのオブジェクトがかえってくる
$parser = PostalCode::parse($filepath);
$records = $parser->get(); // Collection

逐个处理每一条记录

    • 1レコードに対する処理のcallbackを渡して実行

CSVデータ全てを格納しないので、メモリ使用量は抑えられる(はず・・)

$parser = PostalCode::parse($filepath);
$address_list = [];
$parser->walk(function ($record) use (&$address_list) {
    $address_list[] = $record['Code'] . ' ' . $record->getAddress();
});
广告
将在 10 秒后关闭
bannerAds