codecamp第9章‐4 課題(中級)
Discussion
Closed
日本郵便のページにある郵便番号のデータを利用し、「郵便番号」「住所」のデータを表示してください。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>課題</title>
</head>
<body>
<p>以下にファイルから読み込んだ住所データを表示</p>
<p>住所データ</p>
<table border="1">
<tr>
<th>郵便番号</th>
<th>都道府県</th>
<th>市区町村</th>
<th>住所</th>
</tr>
<?php
$filename = './zip_data_split_1.csv';
if (is_readable($filename) === TRUE) {
$fp = fopen($filename, 'r');
if ($fp !== FALSE) {
$fgets = fgetcsv($fp);
while ($fgets !== FALSE) {
$fgets = fgetcsv($fp);
print "<tr>";
print "<td>" . $fgets[0] . "</td>";
print "<td>" . $fgets[4] . "</td>";
print "<td>" . $fgets[5] . "</td>";
print "<td>" . $fgets[6] . "</td>";
print "</tr>";
}
fclose($fp);
} else {
print 'ファイルは開けませんでした';
}
}
?>
</table>
</body>
</html>
データ空白箇所も読み込みされ、出力結果の最終行で中身のないテーブルの行ができている。
原因はfgetcsvとwhile関数の条件部分
今の記述だと、
・ループの条件で前文をfgetcsvで読み込みができているか判定して
・fgetcsvで最終行を読み込んで
・読み込んだ内容を出力して(最終行は空)
・ループ終了
という処理の順番になる。
while ($fgets !== FALSE)
でファイル前文の判定式なので判定がTRUEになり、
$fgets = fgetcsv($fp);
が処理され、この式自体nullだが、判定が通っているので
テーブルだけができあがってしまう。
<?php
$filename = './zip_data_split_1.csv';
if (is_readable($filename) === TRUE) {
$fp = fopen($filename, 'r');
if ($fp !== FALSE) {
while (($fgets = fgetcsv($fp)) !== FALSE) {
print "<tr>";
print "<td>" . $fgets[0] . "</td>";
print "<td>" . $fgets[4] . "</td>";
print "<td>" . $fgets[5] . "</td>";
print "<td>" . $fgets[6] . "</td>";
print "</tr>";
}
fclose($fp);
} else {
print 'ファイルは開けませんでした';
}
}
?>
nullだった場合はFALSEになるため、テーブルも表示されなくなる。
0