PHPでCSVの文字列を配列にする方法

こんにちは、さるまりんです。

PHPでCSVの文字列を配列にします。

こんな文字列があります。

1,ベートーヴェン,ドイツ
2,モーツァルト,オーストリア
3,伊福部昭,日本
4,ドビュッシー,フランス
5,シベリウス,フィンランド
6,グリーグ,ノルウェー
7,コープランド,アメリカ
8,プロコフィエフ,ロシア
9,ファリャ,スペイン
10,スメタナ,チェコ

番号と作曲家の名前と国がカンマ区切りで複数記録されています。

これをまとめて一つの文字列としてもらって配列にするにはどうするでしょうか?

プログラムにしてみました。

$csv=<<<CSV
1,ベートーヴェン,ドイツ
2,モーツァルト,オーストリア
3,伊福部昭,日本
4,ドビュッシー,フランス
5,シベリウス,フィンランド
6,グリーグ,ノルウェー
7,コープランド,アメリカ
8,プロコフィエフ,ロシア
9,ファリャ,スペイン
10,スメタナ,チェコ
CSV;

$lines = explode(PHP_EOL, $csv);
$array = [];
foreach ($lines as $line) {
    $array[] = str_getcsv($line);
}

print_r($array);

プログラムがしているのは以下です。

$csvに文字列としてCSVのデータが入っています。
まずその文字列をPHP_EOL、改行で分割して配列にします。
配列を一行ずつstr_getcsv()関数で分割し、配列$arrayに入れていきます。
最後にprint_r()で出力です。

実行すると↓が出力されます

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => ベートーヴェン
            [2] => ドイツ
        )

    [1] => Array
        (
            [0] => 2
            [1] => モーツァルト
            [2] => オーストリア
        )

    [2] => Array
        (
            [0] => 3
            [1] => 伊福部昭
            [2] => 日本
        )

    [3] => Array
        (
            [0] => 4
            [1] => ドビュッシー
            [2] => フランス
        )

    [4] => Array
        (
            [0] => 5
            [1] => シベリウス
            [2] => フィンランド
        )

    [5] => Array
        (
            [0] => 6
            [1] => グリーグ
            [2] => ノルウェー
        )

    [6] => Array
        (
            [0] => 7
            [1] => コープランド
            [2] => アメリカ
        )

    [7] => Array
        (
            [0] => 8
            [1] => プロコフィエフ
            [2] => ロシア
        )

    [8] => Array
        (
            [0] => 9
            [1] => ファリャ
            [2] => スペイン
        )

    [9] => Array
        (
            [0] => 10
            [1] => スメタナ
            [2] => チェコ
        )

)

ファイルを一行ずつ読むのと違ってまるまる文字列でCSVのデータをもらう機会があったので、上の処理をしてみました。

読んでくださってありがとうございました。

それではまた!