Skip to content

PHP_EX_01 「CSVに書かれた内容を表示する」

Last updated on 2019/7/11

CSVとは?

カンマで値を区切った値が入っているテキストファイルです。

改行ごとにデータが区切られており、Excel等で開けます。拡張子がcsvとなってます。

PHPでCSVを読み込む

PHPでCSVのファイルを読み込む方法はいくつかありますが、今回は一つを紹介します。

<?php

// ファイルの場所
$filepath = "./file/saizeriya.csv";

// ファイルを扱うクラスにファイルを読み込ませる
$file = new SplFileObject($filepath);

// CSVを扱う設定にする。
$file->setFlags(SplFileObject::READ_CSV);

上記のコードを実行すると、$fileという変数にCSVのファイルが改行毎の区切りで配列になって格納されています。

読み込んだ内容を出力してみる

$fileの配列に一行毎の値が入っており、更に一行がカンマで区切られた値が配列になっている多次元配列になっています。

$list = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
];

配列の中に配列がいくつか内包されていることを言います。

今回使うCSVのファイルは、サイゼリヤのメニューのデータで、中身は以下の通りの構成になってます。

idメニュー名大カテゴリ小カテゴリ値段カロリー使われている塩の量
1彩りガーデンサラダsidedishsalad2991301.1

もしすべてのメニューの金額と名前を取り出したかったら、下記のように書きます。

<?php

// ファイルの場所
$filepath = "./file/saizeriya.csv";

// ファイルを扱うクラスにファイルを読み込ませる
$file = new SplFileObject($filepath);

// CSVを扱う設定にする。
$file->setFlags(SplFileObject::READ_CSV);

foreach ($file as $line) {
    // メニュー名の取得
    $name = $line[1]; // メニューはkeyが1にある(2番目にある)
    // 金額の取得
    $price = $line[4]; // 金額はkeyが4にある(5番目にある)
}

foreachについてわからなかったら、下記参照

全体のコード

saizeriya_list.php

<?php

// ファイルの場所
$filepath = "./file/saizeriya.csv";

// ファイルを扱うクラスにファイルを読み込ませる
$file = new SplFileObject($filepath);
// CSVを扱う設定にする。
$file->setFlags(SplFileObject::READ_CSV);

?>
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> メニューの一覧 | サイゼリヤのメニュー</title>
</head>

<body>
    <h1>サイゼリヤのメニュー</h1>

    <form action="./saizeriya.php" method="post">
        <select name="line_count">
            <?php foreach ($file as $key => $value) { ?>
            <option value="<?= $key ?>"><?= $value[1] ?></option>
            <?php } ?>
        </select>
        <button type="submit">
            確認する
        </button>
    </form>

</body>

</html>

saizeriya.php

<?php

// ファイルの場所
$filepath = "./file/saizeriya.csv";

// ファイルを扱うクラスにファイルを読み込ませる
$file = new SplFileObject($filepath);
// CSVを扱う設定にする。
$file->setFlags(SplFileObject::READ_CSV);

// POSTで指定されたidが送られてきた場合に使用する変数
$title = "";
$price = 0;

foreach ($file as $line) {
    // メニュー名の取得
    $name = $line[1]; // メニューはkeyが1にある(2番目にある)
    // 金額の取得
    $price = $line[4]; // 金額はkeyが4にある(5番目にある)
}

if (isset($_POST["line_count"])) {
    $line = $file[intval($_POST["line_count"])];
    $title = $line[1];
    $price = intval($line[4]);
} else {
    $title = "エラー";
}

?>
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> <?= $name ?> | サイゼリヤのメニュー</title>
</head>

<body>
    <h1>サイゼリヤのメニュー</h1>

    <?php if ($name == "エラー") { ?>
        <p>
            エラーが発生しました。
        </p>
    <?php } else { ?>
        <h2><?= $title ?></h2>
        <p>¥<?= $price ?></p>
        <p>
            <?php

            $image_name = "ham";
            switch ($line[3]) {
                case 'salad':
                case 'soup':
                    $image_name = "salad";
                    break;
                case 'appetizer':
                    $image_name = "app";
                    break;
                case 'pasta':
                    $image_name = "pasta";
                    break;
                case 'pizza':
                    $image_name = "pizza";
                    break;
                case 'hamburg':
                case 'steak':
                case 'chicken':
                    $image_name = "ham";
                    break;
                case 'doria':
                case 'rice':
                    $image_name = "doria";
                    break;
                case 'dessert':
                    $image_name = "dess";
                    break;
                case 'alcohol':
                    $image_name = "italy";
                    break;
                default:
                    # code...
                    break;
            }

            $image = "https://www.saizeriya.co.jp/menu/grandmenu201903_images/menu_sub_img$image_name.jpg"
            ?>
            <img src="<?= $image ?>" alt="メニュー">
        </p>
    <?php } ?>

</body>

</html>

file/saizeriya.csv

1,彩りガーデンサラダ,sidedish,salad,299,130,1.1
2,小エビのサラダ,sidedish,salad,349,115,1.3
3,やわらかチキンのサラダ,sidedish,salad,299,134,1.2
4,わかめサラダ,sidedish,salad,299,92,2.1
5,イタリアンサラダ,sidedish,salad,299,196,0.7
6,シーフードサラダ,sidedish,salad,599,229,2.4
7,半熟卵とポークのサラダ,sidedish,salad,599,433,2.3
8,コーンクリームスープ,sidedish,soup,149,142,1.1
9,冷たいパンプキンスープ(季節限定),sidedish,soup,149,105,0.9
10,たっぷり野菜のミネストローネ(季節限定),sidedish,soup,299,222,2.1
11,削りたてペコリーノチーズ,sidedish,appetizer,100,59,0.6
12,ミニフィセル,sidedish,appetizer,169,188,1
13,ガーリックトースト,sidedish,appetizer,189,252,1.1
14,セットドリンクバー,drink,drinkbar,190,0,0
15,辛味チキン,sidedish,appetizer,299,374,2.2
16,アスパラガスのオーブン焼き(季節限定),sidedish,appetizer,299,221,1.1
17,ポップコーンシュリンプ,sidedish,appetizer,299,215,1.4
18,エスカルゴのオーブン焼き,sidedish,appetizer,399,256,1.6
19,ムール貝のガーリック焼き,sidedish,appetizer,399,164,1.3
20,野菜ソースのグリルソーセージ,sidedish,appetizer,399,570,3.1
21,チョリソー,sidedish,appetizer,399,393,2
22,柔らか青豆の温サラダ,sidedish,appetizer,199,213,1.1
23,ほうれん草のソテー,sidedish,appetizer,199,138,1.2
24,キャベツとアンチョビのソテー,sidedish,appetizer,199,80,1.5
25,ポテトのグリル,sidedish,appetizer,199,366,2
26,セロリのピクルス(季節限定),sidedish,appetizer,199,52,1.3
27,真イカのパプリカソース,sidedish,appetizer,199,138,1.1
28,フォッカチオ,sidedish,appetizer,119,214,0.8
29,プチフォッカ,sidedish,appetizer,139,214,0.8
30,セットプチフォッカ,sidedish,appetizer,79,107,0.4
31,グラスワイン,drink,alcohol,100,0,0
32,デカンタ・250ml,drink,alcohol,200,0,0
33,デカンタ・500ml,drink,alcohol,399,0,0
34,キリン一番搾り(ジョッキ),drink,alcohol,399,0,0
35,キリン一番搾り(グラス),drink,alcohol,299,0,0
36,ストロングゼロダブルレモン,drink,alcohol,379,0,0
37,マグナム・1500ml,drink,alcohol,1080,0,0
38,グラッパ,drink,alcohol,379,0,0
39,ランブルスコセッコ(赤)辛口,drink,alcohol,1080,0,0
40,ランブルスコ(ロゼ)甘口,drink,alcohol,1080,0,0
41,ベルデッキオ(辛口・中),drink,alcohol,1080,0,0
42,キャンティ(辛口・やや重い),drink,alcohol,1080,0,0
43,キャンティルフィナリゼルパ(辛口・重い),drink,alcohol,2160,0,0
44,サイゼリヤプレミアム(辛口・重い),drink,alcohol,2160,0,0
45,サントリーオールフリー,drink,alcohol,259,0,0
46,フレッシュチーズとトマトのサラダ,sidedish,appetizer,299,203,0.4
47,フレッシュチーズとトマトのサラダ(Wサイズ),sidedish,appetizer,598,406,0.8
48,プロシュート,sidedish,appetizer,399,162,1.8
49,プロシュート(Wサイズ),sidedish,appetizer,798,324,3.6
50,熟成ミラノサラミ,sidedish,appetizer,299,95,1.1
51,熟成ミラノサラミ(Wサイズ),sidedish,appetizer,598,190,2.2
52,マルゲリータピザ,meal,pizza,399,568,2.5
53,パンチェッタのピザ,meal,pizza,399,646,2.9
54,野菜ときのこのピザ,meal,pizza,399,610,2.7
55,やわらかイカのアンチョビのピザ,meal,pizza,499,593,4.6
56,バッファローモッツァレラのピザ,meal,pizza,499,575,2.3
57,ミラノサラミのピザ,meal,pizza,499,606,3.5
58,ほうれん草のグラタン(季節限定),meal,gratin,399,521,1.9
59,シーフードグラタン,meal,gratin,499,537,2.2
60,アラビアータ,meal,pasta,399,591,4.2
61,ミートソースボロニア風,meal,pasta,399,582,4.3
62,半熟卵のミートソースボロニア風,meal,pasta,468,672,4.5
63,アーリオ・オーリオ,meal,pasta,299,560,3.2
64,キャベツのペペロンチーノ,meal,pasta,399,686,3.5
65,タラコソースシシリー風,meal,pasta,399,605,3.7
66,スープ入りトマト味ボンゴレ(季節限定),meal,pasta,499,686,4.8
67,パルマ風スパゲッティ,meal,pasta,399,700,4.2
68,イカの墨入りスパゲッティ,meal,pasta,499,610,3.8
69,カルボナーラ,meal,pasta,499,865,4.1
70,アスパラガスとエビのクリームスパゲッティ(季節限定),meal,pasta,499,711,3.5
71,アラビアータ(Wサイズ),meal,pasta,770,1182,8.4
72,ミートソースボロニア風(Wサイズ),meal,pasta,770,1164,8.6
73,アーリオ・オーリオ(Wサイズ),meal,pasta,574,1120,6.4
74,キャベツのペペロンチーノ(Wサイズ),meal,pasta,770,1372,7
75,タラコソースシシリー風(Wサイズ),meal,pasta,770,1210,7.4
76,パルマ風スパゲッティ(Wサイズ),meal,pasta,770,1400,8.4
77,イカの墨入りスパゲッティ(Wサイズ),meal,pasta,976,1220,7.6
78,カルボナーラ(Wサイズ),meal,pasta,976,1730,8.2
79,アスパラガスとエビのクリームスパゲッティ(季節限定)(Wサイズ),meal,pasta,976,1422,7
80,トッピング半熟卵,sidedish,appetizer,69,90,0.2
81,ミラノ風ドリア,meal,doria,299,542,2.7
82,半熟卵のミラノ風ドリア,meal,doria,368,632,2.9
83,セットプチフォッカ付きミラノ風ドリア,meal,doria,378,649,3.1
84,いろどり野菜のミラノ風ドリア,meal,doria,399,590,3.1
85,エビとイカのドリア,meal,doria,499,624,2.9
86,シーフードパエリア,meal,rice,599,602,3.6
87,エビと野菜のトマトクリームリゾット,meal,rice,399,302,2.2
88,ハヤシ&ターメリックライス,meal,rice,499,638,3.3
89,半熟卵のハヤシ&ターメリックライス,meal,rice,568,728,3.5
90,ミックスグリル,meal,hamburg,599,823,3.8
91,ハンバーグステーキ,meal,hamburg,399,514,2.3
92,デミグラスソースのハンバーグ,meal,hamburg,499,628,3.6
93,野菜ソースのハンバーグ(ディアボラ風),meal,hamburg,499,585,2.6
94,イタリアンハンバーグ,meal,hamburg,499,633,2.5
95,焼肉とハンバーグの盛合せ,meal,hamburg,599,709,3.4
96,若鶏のグリル(ディアボラ風),meal,chicken,499,541,2.1
97,柔らかチキンのチーズ焼き,meal,chicken,499,588,2
98,パンチェッタと若鶏のグリル,meal,chicken,599,663,2.5
99,リブステーキ,meal,steak,999,621,1.5
100,ライス,sidedish,rice,169,303,0
101,ラージライス,sidedish,rice,219,454,0
102,スモールライス,sidedish,rice,119,151,0
103,カプチーノ(アイスケーキ)(季節限定),sidedish,dessert,199,114,0.1
104,ティラミス(アイスケーキ),sidedish,dessert,199,131,0.1
105,シナモンフォッカチオ,sidedish,dessert,169,246,0.8
106,プリンとカプチーノの盛合せ,sidedish,dessert,399,330,0.2
107,プリンとティラミスの盛合せ,sidedish,dessert,399,347,0.2
108,ミルクアイスのせシナモンフォッカチオ,sidedish,dessert,319,346,0.9
109,ミルクジェラート,sidedish,dessert,199,100,0.1
110,シチリア産レモンのソルベ,sidedish,dessert,199,127,0
111,イタリアンプリン,sidedish,dessert,249,216,0.1
112,チョコレートケーキ,sidedish,dessert,299,166,0.1
113,コーヒーゼリー,sidedish,dessert,299,162,0.1
114,トリフアイスクリーム,sidedish,dessert,369,164,0.1

参考