【PHP8.x】str_getcsv関数の使い方
str_getcsv関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
str_getcsv関数は、CSV(Comma Separated Values)形式の文字列を解析し、その内容を配列として取得する関数です。この関数は、外部からCSV形式で提供されたデータを、PHPプログラム内で扱いやすい形式に変換する際に非常に役立ちます。
具体的には、一つのCSV行に相当する文字列を入力として受け取り、その中の各フィールドを配列の要素として返します。デフォルトでは、カンマ「,」を各フィールドの区切り文字として、ダブルクォート「"」をフィールドを囲む文字として認識し処理します。しかし、CSV形式は用途によって区切り文字や囲み文字が異なる場合があるため、この関数はオプションとしてそれらの文字を指定できる柔軟性も持っています。例えば、セミコロンで区切られたCSVや、シングルクォートで囲まれたフィールドを持つCSVなどにも対応可能です。
関数が正常に処理を完了すると、解析された各フィールドの値を要素とする文字列の配列が返されます。これにより、CSVデータの内容に簡単にアクセスし、様々な処理を行うことができます。PHP 8以降では、期待される型ではない引数が渡された場合には TypeError が、不正なCSV形式の文字列や引数によって解析に失敗した場合には ValueError がスローされるため、堅牢なアプリケーションを構築するためにはこれらの例外を適切に処理することが推奨されます。
str_getcsv関数は、CSVデータのインポートやエクスポート機能を実装する上で、非常に基本的かつ重要な機能を提供します。
構文(syntax)
1<?php 2$csvString = "apple,banana,orange"; 3$array = str_getcsv($csvString); 4print_r($array); 5?>
引数(parameters)
string $string, string $separator = ',', string $enclosure = '"', string $escape = '\'
- string $string: 処理対象のCSV形式の文字列
- string $separator = ',': 区切り文字を指定する文字(デフォルトはカンマ)
- string $enclosure = '"': 文字列を囲む文字を指定する文字(デフォルトはダブルクォーテーション)
- string $escape = '\': エスケープ文字を指定する文字(デフォルトはバックスラッシュ)
戻り値(return)
array
指定されたCSV文字列をパースし、各フィールドを要素とする配列を返します。
サンプルコード
PHP str_getcsvで区切り文字を指定する
1<?php 2 3/** 4 * str_getcsv() を使って、デフォルトのカンマ(,)以外の区切り文字(delimiter)を 5 * 指定してCSV文字列を配列に変換するサンプル関数 6 * 7 * @return void 8 */ 9function parseCsvWithCustomDelimiter(): void 10{ 11 // セミコロン(;)を区切り文字(delimiter)として使用するCSV形式の文字列 12 $csvString = '101;Taro Yamada;Tokyo'; 13 14 // str_getcsv() の第2引数に、区切り文字としてセミコロン ';' を指定します。 15 // この引数を指定しない場合、デフォルトでカンマ ',' が使われます。 16 $data = str_getcsv($csvString, ';'); 17 18 // パース結果の配列を出力します 19 print_r($data); 20} 21 22// 関数を実行 23parseCsvWithCustomDelimiter(); 24 25/* 26実行結果: 27 28Array 29( 30 [0] => 101 31 [1] => Taro Yamada 32 [2] => Tokyo 33) 34 35*/
str_getcsv関数は、CSV(Comma-Separated Values)形式の文字列を解析し、各フィールドを要素とする配列に変換するためのPHP関数です。
このサンプルコードでは、str_getcsv関数を使って、デフォルトの区切り文字であるカンマ(,)以外の文字で区切られたCSV文字列を処理する方法を示しています。変数 $csvString には、一般的なカンマではなくセミコロン(;)を区切り文字(デリミタ)として使用した文字列 '101;Taro Yamada;Tokyo' が格納されています。
str_getcsv関数を呼び出す際、第1引数には解析対象の文字列 $csvString を渡します。そして、重要なのが第2引数 $separator です。ここに区切り文字としてセミコロン(;)を指定することで、関数はセミコロンを基準に文字列を分割します。もしこの第2引数を省略すると、デフォルトのカンマ(,)が区切り文字として扱われます。
この関数の戻り値は、解析結果が格納された配列です。実行結果を見ると、元の文字列がセミコロンで正しく分割され、'101'、'Taro Yamada'、'Tokyo' の3つの要素を持つ配列が生成されていることが確認できます。
str_getcsv関数は、CSV形式の文字列を配列に変換する際に便利です。注意点として、この関数はデフォルトでカンマを区切り文字として認識します。サンプルコードのようにセミコロンなど他の文字を区切り文字として使用する場合は、必ず第2引数でその文字を指定する必要があります。また、実際のCSVデータでは、値自体に区切り文字が含まれるケースも考えられます。その場合、値は「囲み文字」(デフォルトはダブルクォート)で囲まれていることが一般的です。この囲み文字やエスケープ文字も、第3、第4引数で指定できることを覚えておくと、より複雑なCSVデータにも対応できます。この関数は文字列を処理するため、ファイルから直接CSVを読み込む場合はfgetcsv関数の利用がより適しています。
PHP str_getcsvでUTF-8 CSVを配列に変換する
1<?php 2 3/** 4 * str_getcsv関数の基本的な使い方を示すサンプルコード。 5 * UTF-8文字列を含むCSV形式の行を配列に変換します。 6 * システムエンジニアを目指す初心者の方にも理解しやすいよう、 7 * デフォルトの引数とカスタムの引数を使った例を示します。 8 */ 9function demonstrateStrGetCsvUsage(): void 10{ 11 // 1. UTF-8文字を含む標準的なCSV文字列の例 12 // 商品名に日本語、備考欄にUTF-8文字を含んでいます。 13 $csvString1 = '"商品名 (日本語)","価格",250,"備考 (UTF-8の例)"'; 14 echo "--- 例 1: デフォルトの区切り文字と囲み文字 ---\n"; 15 echo "元のCSV文字列: " . $csvString1 . "\n\n"; 16 17 // str_getcsv関数を使って、CSV文字列を配列に変換します。 18 // デフォルトでは、カンマ (',') を区切り文字、ダブルクォート ('"') を囲み文字として認識します。 19 // UTF-8文字は正しく処理されます。 20 $dataArray1 = str_getcsv($csvString1); 21 22 echo "str_getcsv() の結果 (デフォルト引数):\n"; 23 print_r($dataArray1); 24 echo "\n"; 25 26 // 2. 異なる区切り文字と囲み文字を使用するCSV文字列の例 27 // セミコロン (';') で区切られ、シングルクォート ("'") で囲まれたデータです。 28 $csvString2 = "'Item ID';'商品名 (PHP8)';'数量';'解説 (UTF-8)'"; 29 echo "--- 例 2: カスタムの区切り文字と囲み文字 ---\n"; 30 echo "元のCSV文字列: " . $csvString2 . "\n\n"; 31 32 // str_getcsv関数に、カスタムの区切り文字と囲み文字を指定します。 33 // 第2引数で区切り文字 (separator) を、第3引数で囲み文字 (enclosure) を設定します。 34 $dataArray2 = str_getcsv($csvString2, ';', "'"); 35 36 echo "str_getcsv() の結果 (セミコロン区切り、シングルクォート囲み):\n"; 37 print_r($dataArray2); 38 echo "\n"; 39} 40 41// 上記の関数を実行し、結果を表示します。 42demonstrateStrGetCsvUsage(); 43
このPHPコードは、CSV形式の文字列を解析して配列に変換するstr_getcsv関数の使い方を説明するものです。この関数は、文字列をCSVの1行として扱い、各フィールドを要素とする配列を返します。日本語のようなUTF-8文字も正しく処理できます。
最初の例では、str_getcsv関数を最も基本的な形で使用しています。第1引数にCSV文字列を渡すだけで、デフォルトの区切り文字であるカンマ(,)と、囲み文字であるダブルクォート(")を自動的に認識し、文字列を配列に分割します。
2つ目の例では、より柔軟な使い方を示しています。第2引数に区切り文字としてセミコロン(;)を、第3引数に囲み文字としてシングルクォート(')を明示的に指定しています。これにより、一般的なカンマ区切り以外のデータ形式にも対応できることがわかります。
このようにstr_getcsv関数は、引数を調整することで様々な形式のCSVデータを簡単に扱うことができるため、システム開発において非常に便利な関数です。
str_getcsv関数はCSV形式の文字列「1行分」を配列に変換する関数です。ファイル全体ではなく、1行ずつ処理する点に注意してください。UTF-8などの日本語文字を正しく扱うには、入力する文字列自体のエンコーディングがUTF-8であることが前提となります。特にファイルから読み込んだ文字列を処理する場合は、ファイルの文字コードを事前に確認することが重要です。また、CSVデータの形式は様々であるため、サンプルコードの例2のように、データの仕様に合わせて区切り文字や囲み文字を引数で正しく指定しないと、意図通りに配列へ変換されません。