PHPのfgetcsv()関数とは?CSVファイルを読み込む方法を徹底解説
fgetcsv()関数は、開いているファイルから1行を読み込み、CSVフィールドとして解析するためのPHP標準関数です。読み込んだフィールドは配列として返されるため、CSV形式のファイルを簡単に扱うことができます。本記事では、fgetcsv()関数の基本構文から実際のコード例まで、初心者にもわかりやすく解説します。
構文
fgetcsv(file_pointer, length, delimiter, enclosure, escape)
パラメータ
file_pointer − fopen()、popen()、fsockopen()などによって正常に開かれたファイルへの有効なファイルポインタを指定します。
length − 1行の最大長(バイト数)を指定します。なお、PHP 8以降ではこのパラメータは省略可能になっています。
delimiter − フィールドの区切り文字を指定します。デフォルトはカンマ(,)です。
enclosure − フィールドを囲む文字(エンクロージャ)を指定します。デフォルトはダブルクォーテーション(")です。
escape − エスケープ文字を指定します。デフォルトはバックスラッシュ(\)です。
戻り値
fgetcsv()関数は、読み込んだフィールドを格納した配列を返します。ファイルの終端に達した場合やエラーが発生した場合はfalseを返します。そのため、戻り値を判定することで安全にループ処理を行えます。
使用例
例1:基本的な使い方
まず、以下のような「products.csv」というCSVファイルがあるとします。
laptop, keyboard, mouse
次のコードは、CSVファイルの内容(商品リスト)を読み込んで表示するシンプルな例です。
<?php
$file_pointer = fopen("products.csv", "r");
print_r(fgetcsv($file_pointer));
fclose($file_pointer);
?>
出力結果
Array ( [0] => Laptop [1] => Keyboard [2] => Mouse )
カンマ区切りの各行が自動的に配列の要素として分割されていることが確認できます。
例2:whileループで複数行を読み込む
続いて、より実践的な例を見てみましょう。複数行のCSVファイルを最後まで読み込むには、feof()関数とwhileループを組み合わせます。
以下のような「tutorials.csv」というCSVファイルを用意します。
Java, C#, HTML5, CSS3, Bootstrap, Android
次のコードは、「tutorials.csv」の内容を1行ずつすべて読み込んで表示する例です。
<?php
$file_pointer = fopen("tutorials.csv", "r");
while (! feof($file_pointer)) {
print_r(fgetcsv($file_pointer));
}
fclose($file_pointer);
?>
出力結果
Array ( [0] => Java [1] => C# [2] => HTML5 [3] => CSS3 [4] => Bootstrap [5] => Android )
まとめ
fgetcsv()関数を使えば、CSVファイルの内容を最小限のコードで配列として取得できます。基本的な読み込みはfopen()と組み合わせるだけで実現でき、複数行を扱う場合はfeof()との組み合わせが定番の書き方です。なお、日本語を含むCSVファイルを扱う場合は、文字コード(Shift-JISやUTF-8など)に注意し、必要に応じてmb_convert_encoding()でエンコーディングを変換すると文字化けを防げます。
-
PHPのstr_getcsv()関数とは?CSV文字列を配列に変換する方法
PHPのstr_getcsv()関数は、CSV形式の文字列を解析し、配列に変換するために使用される関数です。この関数を実行すると、CSVの各フィールドが格納された配列が返されます。文字列として渡されたCSVデータを手軽に扱える形へ変換できるため、データの取り込み処理などでよく利用されています。 構文 str_getcsv(str, delimiter, enclosure, escape) パラメータ str − 解析対象となる入力文字列を指定します。 delimiter − フィールドの区切り文字(デリミタ)を設定します。デフォルトはカンマ「,」です。 enclosure − フィールドを
-
PHPのfputcsv()関数の使い方とサンプルコード
fputcsv()関数は、配列のデータを1行分のCSV形式に整形し、すでに開いているファイルへ書き込むための関数です。この関数は、書き込まれた文字列の長さを返します。 構文 fputcsv(file_pointer, fields, delimiter, enclosure, escape) パラメータ file_pointer − fopen()、popen()、またはfsockopen()によって正常にオープンされたファイルを指す有効なファイルポインタを指定します。 fields − 書き込み対象となる文字列の配列を指定します。 delimiter − フィールド同士を区切る区切り文字