・CSVファイルの読み込み方法を教えて欲しい。
・また、file関数との使い分け方は?
PHPでは、CSV形式のファイルからデータを読み込む際に、fgetcsvという関数を使うことができますが、使い方をよく知らない人も多いでしょう。
そこでこの記事では、fgetcsvの使い方やCSVファイルの読み込み方法について解説していきます!
この記事を読めば、PHPでfgetcsvを使う方法を理解し、CSVファイルの読み込みをすることができるでしょう。
fgetcsvの使い方がわからない、file関数との使い分け方も知りたいという人は、ぜひ最後までご覧ください。
fgetcsvとは?
fgetcsvとは、fopenによって開いたCSV形式のファイルからデータを読み込む関数です。
1 |
fgetcsv($handle, $length, $delimiter, $enclosure, $escape) |
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 2 |
//CSVファイル 1,山田太郎,東京 |
このデータはユーザー情報をまとめたシンプルなもので、1行を1つのデータとして表しています。
行の左からユーザーID、名前、出身地をそれぞれコンマ「,」で区切られていますね。
fgetcsvを使えば、このデータを配列として読み込むことができるのです。
では、基本的な使い方から見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 |
<?php // test.csvファイルを開いて、読み込みモードに設定する $fp = fopen('./test.csv', 'r'); // fgetcsvでファイルのデータを読み込む $data = fgetcsv($fp); var_dump($data); // ファイルを閉じる fclose($fp); ?> |
※先ほどのユーザー情報が書かれたCSVファイルを「test.csv」というファイル名にしておきます。
まず、fopen関数を使って「test.csv」ファイルを開きます。
このとき、オープンモードは読み込みの「r」に設定し、変数「$fp」に代入しておきましょう。
そして、fgetcsvでファイルのデータを読み込んで、変数「$data」に代入し、それをvar_dumpで出力します。
最後に、開いたファイルをfclose関数で閉じましょう。
結果を出力すると、次のようになります。
CSVファイルの1行のデータが配列として読み込まれていますね。
このようにfgetcsvを使えば、CSVファイルのデータを配列として読み込むことができます。
使い方を覚えておきましょう。
CSVファイルからデータを読み込んで表示してみよう
fgetcsvの基本的な使い方がわかりました。
しかし、先ほどはファイルにデータが1つ(1行)しか保存されていませんでした。
実際にたくさんのデータがある場合に、ブラウザに表として表示できるようにしたいですね。
なのでここでは、CSVファイルからデータを読み込んで、ブラウザに表示してみる方法を解説していきます。
1 2 3 4 |
//test.csv 1,山田太郎,東京 2,鈴木花子,大阪 3,佐藤次郎,福岡 |
test.csvファイルに上記のようなユーザー情報があったとします。
これをfgetcsvを使って配列として読み込み、表にして表示してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php // test.csvファイルを開いて、読み込みモードに設定する $fp = fopen('./test.csv', 'r'); // テーブルタグを作成し、テーブルヘッダーで見出しを作る echo '<table border="1"> <tr> <th>ID</th> <th>名前</th> <th>出身地</th> </tr>'; // while文でCSVファイルのデータを1つずつ繰り返し読み込む while($data = fgetcsv($fp)){ // テーブルセルに配列の値を格納 echo '<tr>'; echo '<td>'.$data[0].'</td>'; echo '<td>'.$data[1].'</td>'; echo '<td>'.$data[2].'</td>'; echo '</tr>'; } // テーブルの閉じタグ echo '</table>'; // 開いたファイルを閉じる fclose($fp); ?> |
まず、全体的なコードは上記のようになります。
流れとしては、fopen関数で「test.csv」ファイルを開き、テーブル(表)を作成して、fgetcsvで読み込んだデータを表に格納するという順です。
少し、コードがややこしいと思うので、分けて詳しく解説していきます。
1 2 |
// test.csvファイルを開いて、読み込みモードに設定する $fp = fopen('./test.csv', 'r'); |
まず、最初の文ですが、これは先ほどと同じです。
fopen関数で「test.csv」ファイルを開き、オープンモードを読み込みの「r」に設定しておきます。
そして、そのfopen関数を変数の「$fp」に代入しておきましょう。
1 2 3 4 5 6 7 |
// テーブルタグを作成し、テーブルヘッダーで見出しを作る echo '<table border="1"> <tr> <th>ID</th> <th>名前</th> <th>出身地</th> </tr>'; |
次に、ここではテーブル(表)を作成しています。
tabelタグを作成し、その中に見出しとなるthタグで「ID」「名前」「出身地」を作っておきます。
これらのHTMLタグをPHPで表示させるには、echoを使ってシングルクォーテーション「’’」またはダブルクォーテーションを「””」を使って実装することができます。
1 2 3 4 5 6 7 8 9 10 |
// while文でCSVファイルのデータを1つずつ繰り返し読み込む while($data = fgetcsv($fp)){ // テーブルセルに配列の値を格納 echo '<tr>'; echo '<td>'.$data[0].'</td>'; echo '<td>'.$data[1].'</td>'; echo '<td>'.$data[2].'</td>'; echo '</tr>'; } |
そして、ファイルのデータを読み込むコードになります。
データを1つずつ読み込むには、繰り返し処理のwhile文を使うと便利です。
fgetcsvにfopen関数によって開いたCSVファイルを指定し(ここでは$fp)、それを変数「$data」に代入します。
このとき、変数「$data」にはデータの「ID」「名前」「出身地」が格納され、それぞれインデックス番号が「0」「1」「2」というように設定されていきます。
なので、テーブルセルのtdタグに、「$data[0]」「$data[1]」「$data[2]」と指定することで、配列の中身を表に入れることができます。
1 2 3 4 5 |
// テーブルの閉じタグ echo '</table>'; // 開いたファイルを閉じる fclose($fp); |
あとは、表の閉じタグを指定して、開いたファイルをfclose関数で閉じれば、完了です。
結果を表示して、確認してみましょう。
test.csvファイルにあったデータが表として表示されていますね。
このように、fgetcsvを使ってCSVファイルのデータを配列として読み込むことで、ブラウザに表示することもできます。
今回は、表にしてデータを表示しましたが、シンプルにテキストやリストとして表示させることも可能です。
なので、tableタグの部分は自分の好きな表示の仕方に変えて、データを表示してみるといいでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// ※変更部分 <?php ・・・ // while文でCSVファイルのデータを1つずつ繰り返し読み込む while($data = fgetcsv($fp)){ echo '<tr>'; // テーブルセルに配列の値を格納 for($i = 0; $i < count($data); $i++){ echo '<td>'.$data[$i].'</td>'; } echo '</tr>'; } ・・・ ?> |
データの数が多くなってきた場合、1つずつechoで指定いたら面倒なので、for文で条件式を指定しておけば簡単です。
条件式の部分に、count関数で「$data」の数を計算し、その数の分だけ繰り返し処理でtdタグに格納していきます。
結果はwhile文を使った時と同じになるので、使いやすい方を選ぶといいでしょう。
PHPによるCSVファイルの読み込み手順を解説fileとの使い分け
ここまでで、fgetcsvを使ってファイルのデータを読み込む方法がわかりました。
CSVファイルからデータを読み込むには、fgetcsvだけでなく、file関数というものも使うことができます。
file関数とは、1行ごとに配列として読み込む関数です。
1 |
file(ファイル名) |
file関数を使えば、簡単にファイルのデータを配列として読み込むことができます。
では、実際の使い方を見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php // test.csvファイルを読み込む $line = file('./test.csv'); // 配列の値を繰り返し処理で表示する foreach($line as $value){ // 1行のデータをコンマで分割する $data = explode(',', $value); echo '<p>'; echo 'ID:'.$data[0].'<br>'; echo '名前:'.$data[1].'<br>'; echo '出身:'.$data[2].'<br>'; echo '</p>'; } ?> |
まず、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ファイルのデータを配列として読み込むことができます。
1 2 |
//※例 1,"山田太郎","東京" |
fgetcsvと合わせてfile関数の使い方を理解し、使い分けられるようにしておきましょう。
また、先ほど少し解説したexplode関数について詳しく知りたい人は、以下をご覧ください。
PHPで文字列を分割するには?explode関数の基本とその使い方まとめ
今回は、PHPのfgetcsvの使い方やCSVファイルの読み込み方法について解説しました。
fgetcsvは、fopenによって開いたCSV形式のファイルからデータを読み込むことができる関数です。
CSVファイルから1行のデータを配列として読み込むことができるので、使い方を覚えくといいでしょう。
また、file関数も1行ごとに配列として読み込んでくれるので、合わせて使い方を覚えておくといいですね。
この記事がPHPの学習に役立つと幸いです。