sherylranka426
@sherylranka426

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

ご自身の「記事」として投稿しようとして誤って「意見交換」になっていませんか?
仮に上記の状態であれば本投稿はクローズし、改めて「記事」として投稿してください。

1Like

すみません、今日始めたばかりで何もわかっていませんでした。
教えていただきありがとうございます。

2Like

Your answer might help someone💌