PHPでcsvファイルを配列に変換して表示する方法
1351 回閲覧されました
みなさんこんにちは、jonioです。
実務でcsvファイルをphpで読み込んでそれを表示しているコードを読まないといけなかったのですが次に同じ事をした時に早く対処できるようにするためのアウトプットの記事を書きました。
それでは解説します。
なぜHTMLで表示しないか
csvファイルを渡されて中身の行数が少なかったらHTMLで直接書けばいいです。
でも〜百行とかあった時に直接書くと抜けがあったり間違えるかもしれないので現実的ではないです。(行数が少なかったとしても間違えて書くかもしれないので直接書くのは止めたほうがいいです)
だからcsvファイルの中身をそのまま表示する事になります。
csvファイルの場所
MAMPで表示していますが↓の赤枠にcsvファイルはあります。
csvファイルを開く
phpファイルのコードを↓にします。
2行目の「fopen()」ですがこれでファイルを開きます。
コードの書き方は「fopen(ファイルのパス,モードの指定)」です。
ファイルのパスはファイルがある場所の事です。(↑の画像でパスを参照してください)
モードの指定はファイルを読み込みなのか書き込みなのかなど指定方法が色々ありaとかrとかwとか変わりますが今は読み込みをしたいので「r」になります。
指定方法はこの記事に解説があります。
「fopen」で検索すると「ファイルポインタ」という用語がでてきて意味が分からなかったので調べたのですがブラックボックスとして扱って問題ないみたいです。
それについてはこの記事に解説があります。
csvへのアクセスが終わったらそのcsvを閉じるために3行目があり引数($file)は2行目の事です。
次はcsvファイルの内容をtableタグの中に埋め込んで表示します。
csvファイルの内容をtableタグの中に埋め込んで表示
まずコードを↓にします。
csvファイルの中身を表示するためにコードを↓にします。
8行目の「fgetcsv( )」ですがこれでcsvファイルを読み込んで出力しています。
出力するcsvファイルの中身は↓ですが「商品名の行」・「服の行」・「靴の行」・・・と上から順に行の中身を出力します。
8行目と14行目の「while($line = fgetcsv($file)) { }」でcsvファイルを出力する間(6つの行を表示する間){ }の中身の処理が行われます。
1つ目の行の時の{ }の中の処理・2つ目の行の時の{ }の中の処理・3つ目の行の時の{ }の中の処理・・・ 6つ目の行の時の{ }の中の処理といった具合です。
それぞれの行に対して行われる処理が9行目〜13行目ですが9行目と13行目でtrタグが入りその中に10行目〜12行目を使ってtdタグとその中身を入れます。
中身の入れ方ですが1つの行で理解できれば全ての行について理解できるので「商品名」の行で説明します。
表示する内容は「商品名」・「金額」・「購入日」ですがどうすれば表示できるかを考えます。
9行目の「$line」は配列になっていてその中に商品名・金額・購入日が入っていますがそれを確認するために一旦コードの追加をします。
そしてパソコンの画面で確認すると↓の表示になります。(配列の確認ができたら13行目は消してください)
商品名・金額・購入日のインデックス番号は↓になります。
- 商品名 : 0
- 金額 : 1
- 購入日 : 2
インデックス番号の0番目〜2番目を表示すればいいのでfor文を使います。
だから8行目〜10行目はfor文になっています。
8行目の「count($line)」は3で$iは0・1・2を使うことができて$line[$i]で商品名・金額・購入日を表示しています。