質問: count(str_getcsv($line)); //$headerLineNumはヘッダー行項目数 if ($line_count != $headerLineNum) { return 'ヘッダー行と項目数が異なります。'; } } ``` 以下のデータの場合、sgr_getcsvが正しく動かず、項目数を6としてしまいます。 ".,",データ2,データ3,データ4,データ5 ちなみに、以下の場合は、正しく機能し、項目数が5となります。 データ2,".,",データ3,データ4,データ5 先頭にダブルクォーテーションで囲まれたものがある場合、何かしら処理が必要なのでしょうか?
回答: 第2引数以降の設定でダメなら、裏技的なことかも知れませんが、$lineの中身を加工して、str_getcsv()で正常に処理できるようにする必要があるかも知れません。 ≪案1≫ ダブルクォーテーションで囲まれた要素を別の文字に置き換え、列データに分割後に元のデータに戻す。 ≪案2≫ ダブルクォーテーションで囲まれた要素以外のすべての要素をダブルクォーテーションで囲むように加工する。 (これが本来のCSVの書式だが、str_getcsv()の第2引数以降の設定が必要かどうかは不明) ※元々ダブルクォーテーションで囲まれている要素は、正規表現などで検出します。