PHPでCSVファイルを入出力する方法

今回はPHPでcsvファイルを入出力するための便利な関数について解説します。

PHPに限らず一般的なプログラミング言語ではファイルの入出力の際にはテキストデータを扱います。データを配列などの何らかの形式にしたい場合はそのテキストデータを解析してその形式にするという手順が一般的ですが、PHPではcsvファイルを直接配列として取得する機能が用意されています。しっかり学んで効率的なプログラム開発を目指しましょう。

ざっくりPHP入門(初心者〜中級者向け)

fgetcsv関数を使ってcsvファイルを配列として読み込もう

まずはcsvファイルの読み込み方法について解説します。

以下のようなcsvファイルがあったとします。各行に県名がカンマで区切りられたcsvファイルです。ファイル名をfile.csvとしました。

 

これをfgetcsv関数を使って読み込んでみましょう。

基本形は以下となります。fopen関数の第二引数を”r”にすることで読み込み専用としてファイルを開きます。その後fgetcsv関数で1行ずつ読み込んでいきますが、fgetcsv関数から受け取ったデータは配列となります。各行print_r関数で出力させています。

 

結果は以下の通りとなります。各行配列として受け取ったことがおわかりかと思います。

 

csvファイルの中にはカンマ区切りではなく以下のようにタブ区切りのものも存在します。このようなファイルを読み込むにはどのようにしたら良いのでしょうか。

 

fgetcsv関数の第三引数に区切り文字を指定することができます。以下のようにタブを示すエスケープ文字である「\t」を指定するとタブ区切りデータを読み込むことができるわけです。第三引数を指定したことで第二引数も設定が必要になりますが、これが想定されるデータ数よりも多い数を設定してください。

 

次に下記のように各文字列がダブルクォーテーションで括られているデータを扱う方法です。Excelからcsvファイルを生成する場合によく見られる例です。

 

その場合はfgetcsv関数の第四引数で指定することで可能になります。

 

ちなみに、ダブルクオーテーションは指定しなくてもデフォルトで検知してくれるので実は上記のケースでは第四引数は不要です。あまり見ないケースですがシングルクォーテーションで括られている場合には第四引数で指定してください。

【PHP入門】PHPでforeachを使う方法!

fputcsv関数を使って配列をcsv形式に出力しよう

次に配列をcsvファイルに出力する方法について解説します。

以下の例では2重配列$dataをcsvファイルに出力する例になります。fopen関数の第二引数を”w”にすることで書き込み(上書き)専用でファイルを開いてくれます。次に$dataをforeachループで1行ずつfputcsvで出力させています。

 

このプログラムで生成したcsvファイルは以下のようになります。デフォルトではカンマ区切りとなります。

 

次にタブ区切りでcsvファイルに出力してみましょう。fputcsv関数の第三引数にタブを示すエスケープ文字「\t」を指定します。

 

出力されたcsvファイルは以下のとおりです。タブ区切りで保存することができました。区切り文字は1文字という制約はありますが任意に指定することができます。

 

fputcsv関数を使って配列をcsvファイルの最後に追加しよう

完全に上書きするのではなく、元のファイルの最後に追加する方法について解説します。。

fopen関数の第二引数を”a”にすることで完全な上書きではなくcsvファイルの最後に追加することになります。あとは追加したい配列$dataをfputcsvに渡すだけです。

 

以下の通りファイルの最後にカンマ区切りでデータが追加されました。

 

まとめ

いかがでしょうか。今回はPHPでcsvファイルを入出力する方法について解説しました。

ファイルの読み込み時に文字列データではなく配列として出力したり、配列を何も文字列処理することなくcsvに直接書き込めることがおわかりいただけたかと思います。しっかり学んで効率的なプログラム開発を目指しましょう。

PHPによるCSVファイルの読み込み手順を解説

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?