【決定版】PHPで超簡単にCSVを操作する方法

のえる のえる
2019.07.16

プログラムを作っていく中で、データのやり取りや保存などを手軽に行う方法の一つとして「CSV」があります。

 

しかし、CSVのやり取りを毎回作っていては時間の無駄、かといって RFC4180 に準拠したCSVを取り扱えるようなプログラムを作るには時間がかかります。

 

今回はそんな、面倒なCSVファイルの取扱いを【超簡単】にしてしまうライブラリをご紹介します。

はじめに

今回ご紹介するライブラリは 「league/csv」 です。
バージョンは記事執筆時点の最新安定板 9.2.1 を使用します。

 

◆league/csvに関するリンク

環境

実行環境はこんな感じです。

 

CentOS 7
PHP Version 7.1.11
Composer

 

※Composerのインストールおよび使い方の説明は割愛します
※Linuxの使い方の説明は割愛します

実装方法

インストール

まずは composer で league/csv をインストールします

続いて league/csv を使用できるようにします

これで league/csv を使用する準備ができました。

CSVファイルを読み込む

CSVを読み込むには下記のような感じになります。

これですべてのデータを2次元配列として取得することができます。
エンコードも設定1つでできるので非常に楽ですね。

細かくCSVデータを取得する

このライブラリの真骨頂はここにあると思っています。
1つずつ説明していきます。

CSVの詳細を設定する

デフォルトは上記のようなものですが、タブ区切りなどにも変更が可能です。

ヘッダー行を設定する

指定した行番号のデータをヘッダーとして設定・取得できます。
ヘッダーを指定した場合、データは 連想配列として取得 できるようになります。

 

注意

ヘッダーを指定した場合 データ開始の番号が1番からになる という点に注意です。

列を指定して取得する

特定の列のみを取得するには下記のようになります。

なお fetchColumn はヘッダーを指定した場合、連想配列のキーを指定して取得することも可能です。

取得位置や件数を指定して取得する

データベースのSQLのように、取得開始位置や件数を指定して取得できます。

JSON文字列化

JSON文字列としてCSVのデータを出力することができます。
ヘッダーを指定するとkey-value形式になり、指定しないと先頭に行番号の付いた配列形式になります。

XMLとして出力する

下記のような感じでCSVのデータをXMLとして出力できます。

補足

ヘッダーを指定しない場合下記のようにフィールド名が数字になります。

CSVファイルを書き出す

CSVを書き出すには下記のような感じになります。

注意

既存ファイルへの追記などの場合 insertOne, insertAll は 実行した時点でファイルに書き込まれます。

注意

囲い文字を指定しても出力されたファイルに囲い文字が設定されていない場合 RFC4180 を読んでください。
全ての項目を囲い文字で囲う処理はありません。

CSVファイルをダウンロードさせる

CSVファイルをダウンロードさせるには下記のような感じになります。

output の時点で header が出力されます。
そのため、ダウンロード命令より前に画面出力を行うとエラーになります。

補足

日本語名のファイルダウンロードにも対応しています

Composerが使えない・使わない場合

もし環境によりComposerが使えない場合やWindowsで使用する場合など、別の方法でインストールしたい時はこちらの記事をご参照ください。
PhpSpreadsheetを例に挙げた、Composerを使わずに使用する方法を記載しています。

 

さいごに

今回説明したのは基本的な操作になります。
今までCSVファイルを扱うためにアレコレとプログラムを書いていましたが、これはかなり楽になります。
また、今回はご紹介しませんでしたが、DBとの連携もできるみたいですので、もっと詳しく操作したい場合は、公式の APIリファレンス を参照してください。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer