公式ドキュメント
https://csv.thephpleague.com/9.0/
インストール
$ composer require league/csv
使い方
<?php
require_once './vendor/autoload.php';
use League\Csv\Reader;
use League\Csv\Writer;
$csv = './tmp.csv';
$data = [
[ 'H1', 'H2', 'H3' ],
[ 'A1', 'B1', 'C1' ],
[ 'A2', 'B2', 'C2' ],
[ 'A3', 'B3', 'C3' ],
];
# writerを準備
$writer = Writer::createFromPath($csv, 'w');
# デリミタを変更したい時はsetDelimiter
$writer->setDelimiter(';');
# 書き込み
$writer->insertAll($data);
// or foreach($records as $row) $writer->insertOne($row);
# readerを準備
$reader = Reader::createFromPath($csv, 'r');
$reader->setHeaderOffset(0);
$reader->setDelimiter(';');
# ヘッダーとレコードを取得
$header = $reader->getHeader();
$records = iterator_to_array($reader->getRecords(), false);
# 出力
printf(">> %s\n", implode("<>", $header));
foreach($records as $record) {
printf(">> %s\n", implode("<>", $record));
}
解説
league/csvはCSVファイルを読み書きするためのライブラリです。
一行目がヘッダーの場合、setHeaderOffset(0)と書きます。
区切り文字を変更するにはsetDelimiterを使います。
ヘッダーのあるCSVでgetRecordsを使った場合、recordsの配列keyは1から開始になる為、iterator_to_arrayを用いて配列keyを0から開始に振り直しています。