注目キーワード
  1. npm
  2. composer
  3. css

[PHP] league/csvでCSV処理

公式ドキュメント

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から開始に振り直しています。