・CSVファイルの読み込み方法を教えて欲しい。
・また、file関数との使い分け方は?
PHPでは、CSV形式のファイルからデータを読み込む際に、fgetcsvという関数を使うことができますが、使い方をよく知らない人も多いでしょう。
そこでこの記事では、fgetcsvの使い方やCSVファイルの読み込み方法について解説していきます!
この記事を読めば、PHPでfgetcsvを使う方法を理解し、CSVファイルの読み込みをすることができるでしょう。
fgetcsvの使い方がわからない、file関数との使い分け方も知りたいという人は、ぜひ最後までご覧ください。

fgetcsvとは?
fgetcsvとは、fopenによって開いたCSV形式のファイルからデータを読み込む関数です。
fgetcsvは、行をCSVフォーマットのフィールドとして読み込み、読み込んだフィールドを含む配列を返します。
handle | 有効なファイルポインタ(fopenやpopen、fsockopenなどで正常に開かれたファイルを指している必要がある) |
length | CSVファイルにある最も長い行よりも大きい必要がある |
delimiter | フィールドのデリミタ (1文字のみ) を設定する |
enclosure | フィールド囲いこみ文字 (1文字のみ) を設定する |
escape | エスケープ文字 (最大で1文字) を設定する |
fgetcsvでは、上記のように5つのパラメータを指定することができます。
第1引数には、fopenなどの関数によって開かれたCSVファイルを指定し、データを配列として読み込むことができます。
fgetcsvの使い方
では、実際にfgetcsvの使い方を解説していきます。
まだfgetcsvの使い方を知らない人は、ここでしっかりと理解していきましょう。
fgetcsvの基本的な使い方
fgetcsvはCSVファイルからデータを読み込むことができます。
まず、CSVファイルとは、データを項目ごとにカンマで区切ったテキストファイルを表します。
例えば、以下のようなデータ。
このデータはユーザー情報をまとめたシンプルなもので、1行を1つのデータとして表しています。
行の左からユーザーID、名前、出身地をそれぞれコンマ「,」で区切られていますね。
fgetcsvを使えば、このデータを配列として読み込むことができるのです。
では、基本的な使い方から見ていきましょう。
※先ほどのユーザー情報が書かれたCSVファイルを「test.csv」というファイル名にしておきます。
まず、fopen関数を使って「test.csv」ファイルを開きます。
このとき、オープンモードは読み込みの「r」に設定し、変数「$fp」に代入しておきましょう。
そして、fgetcsvでファイルのデータを読み込んで、変数「$data」に代入し、それをvar_dumpで出力します。
最後に、開いたファイルをfclose関数で閉じましょう。
結果を出力すると、次のようになります。
CSVファイルの1行のデータが配列として読み込まれていますね。
このようにfgetcsvを使えば、CSVファイルのデータを配列として読み込むことができます。
使い方を覚えておきましょう。
CSVファイルからデータを読み込んで表示してみよう
fgetcsvの基本的な使い方がわかりました。
しかし、先ほどはファイルにデータが1つ(1行)しか保存されていませんでした。
実際にたくさんのデータがある場合に、ブラウザに表として表示できるようにしたいですね。
なのでここでは、CSVファイルからデータを読み込んで、ブラウザに表示してみる方法を解説していきます。
test.csvファイルに上記のようなユーザー情報があったとします。
これをfgetcsvを使って配列として読み込み、表にして表示してみましょう。
まず、全体的なコードは上記のようになります。
流れとしては、fopen関数で「test.csv」ファイルを開き、テーブル(表)を作成して、fgetcsvで読み込んだデータを表に格納するという順です。
少し、コードがややこしいと思うので、分けて詳しく解説していきます。
まず、最初の文ですが、これは先ほどと同じです。
fopen関数で「test.csv」ファイルを開き、オープンモードを読み込みの「r」に設定しておきます。
そして、そのfopen関数を変数の「$fp」に代入しておきましょう。
次に、ここではテーブル(表)を作成しています。
tabelタグを作成し、その中に見出しとなるthタグで「ID」「名前」「出身地」を作っておきます。
これらのHTMLタグをPHPで表示させるには、echoを使ってシングルクォーテーション「’’」またはダブルクォーテーションを「””」を使って実装することができます。
そして、ファイルのデータを読み込むコードになります。
データを1つずつ読み込むには、繰り返し処理のwhile文を使うと便利です。
fgetcsvにfopen関数によって開いたCSVファイルを指定し(ここでは$fp)、それを変数「$data」に代入します。
このとき、変数「$data」にはデータの「ID」「名前」「出身地」が格納され、それぞれインデックス番号が「0」「1」「2」というように設定されていきます。
なので、テーブルセルのtdタグに、「$data[0]」「$data[1]」「$data[2]」と指定することで、配列の中身を表に入れることができます。
あとは、表の閉じタグを指定して、開いたファイルをfclose関数で閉じれば、完了です。
結果を表示して、確認してみましょう。
test.csvファイルにあったデータが表として表示されていますね。
このように、fgetcsvを使ってCSVファイルのデータを配列として読み込むことで、ブラウザに表示することもできます。
今回は、表にしてデータを表示しましたが、シンプルにテキストやリストとして表示させることも可能です。
なので、tableタグの部分は自分の好きな表示の仕方に変えて、データを表示してみるといいでしょう。
データの数が多くなってきた場合、1つずつechoで指定いたら面倒なので、for文で条件式を指定しておけば簡単です。
条件式の部分に、count関数で「$data」の数を計算し、その数の分だけ繰り返し処理でtdタグに格納していきます。
結果はwhile文を使った時と同じになるので、使いやすい方を選ぶといいでしょう。


fileとの使い分け
ここまでで、fgetcsvを使ってファイルのデータを読み込む方法がわかりました。
CSVファイルからデータを読み込むには、fgetcsvだけでなく、file関数というものも使うことができます。
file関数とは、1行ごとに配列として読み込む関数です。
file関数を使えば、簡単にファイルのデータを配列として読み込むことができます。
では、実際の使い方を見ていきましょう。
まず、file関数で読み込んだ「test.csv」ファイルを変数の「$line」に代入します。
「$line」にはデータが配列として入っているため、foreach文の繰り返し処理で「$line as $value」と指定します。
そして、$valueに1行ずつデータが入ってくるので、それをコンマで分割するためにexplode関数を使います。
第1引数には分割するための文字列(コンマ「,」)、第2引数には分割する文字列($value)を指定しましょう。
explode関数によって分割された文字列は「$data」に代入し、それぞれ「0」「1」「2」というようにインデックス番号がついているので、「$data[0]」「$data[1]」「$data[2]」と順番に出力します。
結果を表示すると、次のようになるでしょう。
CSVファイルから読み込んだデータが1行ずつ表示されていますね。
このように、file関数を使えば、簡単にCSVファイルのデータを配列として読み込むことができます。
fgetcsvと合わせてfile関数の使い方を理解し、使い分けられるようにしておきましょう。
また、先ほど少し解説したexplode関数について詳しく知りたい人は、以下をご覧ください。

まとめ
今回は、PHPのfgetcsvの使い方やCSVファイルの読み込み方法について解説しました。
fgetcsvは、fopenによって開いたCSV形式のファイルからデータを読み込むことができる関数です。
CSVファイルから1行のデータを配列として読み込むことができるので、使い方を覚えくといいでしょう。
また、file関数も1行ごとに配列として読み込んでくれるので、合わせて使い方を覚えておくといいですね。
この記事がPHPの学習に役立つと幸いです。