Q1.以下のcsvファイルをダウンロードし株価一覧を表示せよ。
「実行例」

「解答例」
1.ダウンロードしたstocks_2017-08-16.csvファイルをindex.phpと同じ階層に保存し、index.phpを以下のように編集する。
03 | $fp = fopen ( 'stocks_2017-08-16.csv' , 'r' ); |
05 | while ( $row = fgetcsv ( $fp )){ |
16 | <title>PHPLesson</title> |
20 | <?php foreach ( $data as $record ):?> |
22 | <?php foreach ( $record as $val ):?> |
2.実行してみよう。株価の表が表示されれば成功だ。
[解説]
$fp=fopen('stocks_2017-08-16.csv','r'); |
第1引数のファイルを、第2引数のモードで開き、戻り値としてリソースを返す。
モードは以下。
fopen()
関数で指定可能なモード
モード |
説明 |
r |
読み込みのみで開きます。ファイルポインタはファイルの先頭におきます。 |
r+ |
読み書き可能な状態で開きます。ファイルポインタはファイルの先頭におきます。 |
w |
書き込みのみで開きます。ファイルポインタはファイルの先頭におき、ファイルサイズをゼロにします。ファイルが存在しない場合は新規作成します。 |
w+ |
読み書き可能な状態で開きます。ファイルポインタはファイルの先頭におき、ファイルサイズをゼロにします。ファイルが存在しない場合は新規作成します。 |
a |
追加書き込みモードです。ファイルポインタをファイルの終端におき、ファイルが存在しない場合は新規作成します。 |
a+ |
追加書き込み・読み取りが可能なモードです。ファイルポインタをファイルの終端におき、ファイルが存在しない場合は新規作成します。 |
x |
書き込みのみで開きます。ファイルポインタはファイルの先頭におきます。ファイルが存在するとfopen関数は失敗し、E_WARNINGレベルのエラーを出力します。ファイルが存在しない場合は新規作成します。 |
x+ |
読み込み・書き込みが可能なモードです。ファイルポインタはファイルの先頭におきます。ファイルが存在するとfopen関数は失敗し、E_WARNINGレベルのエラーを出力します。ファイルが存在しない場合は新規作成します。 |
空の配列を宣言
while($row=fgetcsv($fp)){ |
一行ずつ読み込みながらそれをカンマでスプリットし、そこでできた配列を$rowに代入している。
その1行文のデータ$rowを$dataに追加していく。
その処理を文末まで繰り返している。
ここではコメントにしているが、print_r(配列)
は配列がどうなっているのかを視覚的に確認したい場合に便利だ。実行後、ブラウザからソースを見るを選択すると以下のようにきれいに表示される。

[別解]
SplFileObjectを使った作例
04 | <meta charset= "utf-8" > |
06 | <link rel= "stylesheet" href= "../css/style.css" > |
12 | border-collapse:collapse; |
15 | border:1px solid #777; |
18 | background-color:#dff0ff; |
25 | $filename = "stocks_2017-08-16.csv" ; |
27 | $fo = new SplFileObject( $filename , "rb" ); |
29 | echo '<span class="error">エラーがありました。</span><br>' ; |
30 | echo $e ->getMessage(); |
33 | $fo ->setFlags(SplFileObject::READ_CSV |
34 | | SplFileObject::READ_AHEAD |
35 | | SplFileObject::SKIP_EMPTY |
36 | | SplFileObject::DROP_NEW_LINE |
40 | <?php foreach ( $fo as $row ):?> |
42 | <?php foreach ( $row as $val ):?> |
43 | <td><?=htmlspecialchars( $val )?></td> |
コメント