【PHP入門】fgetcsvでCSVファイルの読み込みをする方法!

・PHPでfgetcsvの使い方がよくわからない・・・。
・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タグの部分は自分の好きな表示の仕方に変えて、データを表示してみるといいでしょう。

MEMO
tdタグの部分をfor文で実装すると、よりコードがスッキリします。

データの数が多くなってきた場合、1つずつechoで指定いたら面倒なので、for文で条件式を指定しておけば簡単です。

条件式の部分に、count関数で「$data」の数を計算し、その数の分だけ繰り返し処理でtdタグに格納していきます。

結果はwhile文を使った時と同じになるので、使いやすい方を選ぶといいでしょう。

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

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ファイルのデータを配列として読み込むことができます。

MEMO
データにダブルクォーテーション「””」が含まれているCSVファイルだと、読み込んだ際も「””」が付随してしまいます。
なので、その場合は、「””」を外してくれるfgetcsvを使うといいでしょう。

fgetcsvと合わせてfile関数の使い方を理解し、使い分けられるようにしておきましょう。

また、先ほど少し解説したexplode関数について詳しく知りたい人は、以下をご覧ください。

PHPで文字列を分割するには?explode関数の基本とその使い方

まとめ

今回は、PHPのfgetcsvの使い方やCSVファイルの読み込み方法について解説しました。

fgetcsvは、fopenによって開いたCSV形式のファイルからデータを読み込むことができる関数です。

CSVファイルから1行のデータを配列として読み込むことができるので、使い方を覚えくといいでしょう。

また、file関数も1行ごとに配列として読み込んでくれるので、合わせて使い方を覚えておくといいですね。

この記事がPHPの学習に役立つと幸いです。

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

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