str_getcsv

関数の概要

PHPの str_getcsv 関数は、CSV形式の文字列をパースし、その内容を配列として取得するための関数です。ファイルから直接読み込むのではなく、文字列として渡すことで簡単にCSVデータの分割が可能です。特に小さなCSVデータの処理や、APIなどから取得したCSV形式の文字列を処理したい場合に便利です。

パラメータの説明

  • string $input – CSV形式の文字列。必須です。
  • string $delimiter – フィールドの区切り文字。省略時は ,(カンマ)が使われます。
  • string $enclosure – テキストを囲む文字。省略時は "(ダブルクオート)が使われます。
  • string $escape – エスケープ文字。省略時は \(バックスラッシュ)が使われます。

戻り値

CSV文字列を分割して、それぞれのフィールドを要素とした配列を返します。引数に不正な文字列が渡された場合や、処理できない場合は FALSE を返すこともあります。

使用例

基本的な使い方

$csvString = "りんご,みかん,バナナ";
$array = str_getcsv($csvString);
print_r($array);

この例ではカンマ区切りの文字列を配列に変換し、["りんご", "みかん", "バナナ"] を得ています。

カスタム区切り文字を使う

$csvString = "東京|大阪|名古屋";
$array = str_getcsv($csvString, "|");
print_r($array);

区切り文字がカンマではなくパイプ(|)の場合、delimiter パラメータで指定することで正しく分割できます。

囲み文字やエスケープ文字の指定

$csvString = "'1','2,3','4''5'";
$array = str_getcsv($csvString, ",", "'");
print_r($array);

この例では囲み文字をシングルクオートに変更し、カンマを含むデータやエスケープされたシングルクオートを正しく処理しています。

複数行CSVの処理例

$csvMultiple = "a,b,cnd,e,f";
$lines = explode("n", $csvMultiple);
foreach ($lines as $line) {
    $row = str_getcsv($line);
    print_r($row);
}

複数行のCSV文字列を行ごとに配列化する方法です。改行で分割した後、それぞれの行を str_getcsv に渡しています。

関連する関数

  • fgetcsv – ファイルポインタからCSV行を読み込み配列に変換する
  • explode – 文字列を指定区切り文字で分割する(単純な区切り文字分割用)
  • str_replace – 文字列置換により簡単なCSVの加工に使用できる

まとめ

str_getcsv はCSV形式の文字列を簡単に配列に変換できる便利な関数です。区切り文字や囲み文字、エスケープ文字も柔軟に設定できるため、多様なCSVフォーマットに対応可能です。特にファイルを使わずに文字列として処理したいシーンで重宝します。初心者でも簡単に扱えるため、文字列操作の基本として覚えておくとよいでしょう。