この記事にはプロモーションが含まれています。

【PHP】for文を書くときの考え方|tableを使った九九表作成

【PHP】for文を書くときの考え方|tableを使った九九表作成

ケケンタ

PHPを勉強し始めたけどfor文でつまずいてる……
どう考えてプログラムを組んで良いかイメージできない……

今回はこのようなお悩みをお持ちの方に向けて

九九表作成で学ぶ、for文を書くときの考え方

を解説していきます。

この記事が向いている方
  • PHPのfor文の書き方のイメージが掴み切れない方
  • PHPを学習し始めたばかりの方
  • PHPで九九表を作成したい方
  • 二重ループを理解したい方

for文はプログラミング初心者の方にとって鬼門のひとつと言われています。

if文までは順調と思っていたのに、for文でつまずいてしまったという方も多いのではないでしょうか。

ケケンタ

この記事をご覧いただくことで、どんな手順で考えていけばfor文を上手く組むことができるのかが分かります。

PHPのことを体系的に学びたい方にはこちらの書籍がおすすめです。
(僕自身が初めてPHPを学ぶとき実際に使用した本です)

PHP本格入門[上] ~プログラミングとオブジェクト指向の基礎からデータベース連携まで
大塚 正登/著 技術評論社/出版|Amazon




ケケンタ

ケケンタのITブログでは、WebアプリPHPLaravel)やWeb制作WordPressコーディング)について情報を発信しています。
学習中の方や実務をされている方など多くの方にアクセスいただいていますので、ぜひほかの記事も参考にしてみてください!


運動不足、気になっていませんか?

もしプログラミング学習やお仕事で運動不足が気になっているなら
連続屈伸運動がおすすめです!

ボタンにカーソルを合わせるだけ
カウントダウンが始まるタイマーをご用意してみました!

ケケンタ

無理のない範囲で、ぜひ隙間時間に屈伸運動を取り入れてみて下さい!

タイマースタート

3:00

※運動不足だと連続3分で取り組んでもかなり息が切れます
(僕は加えて気分もちょっと悪くなりました……)
絶対にご無理の無い範囲でお取り組みください!


目次

PHPにおけるfor文とは?

実際に解説をする前に、念のためfor文とは何か?について簡単にお話をします。

for文とは?

for文とは、ある処理を繰り返し行いたいときに用いるPHPの基本構文のひとつです。
似た構文としてwhile文があります。

具体例

<?php
    /**
     * 0~9までの数字を繰り返し出力する
     */
    for($i=0; $i<10; $i++){
        echo $i;
    }

    /**
     * for文を使用しないで書こうとすると……
     */
    echo 0;
    echo 1;
    echo 2;
    echo 3;
    echo 4;
    echo 5;
    echo 6;
    echo 7;
    echo 8;
    echo 9;

    // 出力結果はいずれも以下のようになる
    // 0123456789
?>
ケケンタ

このように、for文を用いることで、より短いプログラムで処理を組むことが可能です。

以下の記事ではピラミッド作成を通してfor文を書くときの考え方を解説しています。
ご興味のある方はぜひご覧ください。

九九表作成を通じてfor文書くときの考え方を学ぶ

for文だけに言えることではありませんが、プログラムを組むときには、考え方にちょっとしたコツがあります。

それは、一気に処理を考えようとするのではなく、課題を分解して小さな処理を書いていき、最終的に大きな処理に組み上げるということです。

これがプログラミングでは論理的思考が重要といわれるゆえんです。

しかしそうは言っても、初心者の方がいきなりこのように処理を書ければ苦労はしません。

ケケンタ

かくいう僕もプログラミングを学び始めたばかりの頃は中々処理が書けるようにならずとても苦労しました……

この記事では、九九表作成を通じて上記のような流れを実際に体験していただける構成になっています。

その中で少しでもプログラミングで処理を組むときの考え方・流れのイメージを掴んでいただければと考えています。

ケケンタ

それでは、以下より実際に九九表を作成しながら、どのようにしてfor文を組んでいけば良いのかを解説していきます。

【実践解説】九九表作成

今回作成する九九表の最終的な出力結果

九九表(完成形)
九九表プログラム(完成形)
<table class="kuku-tb">
    <tr>
        <th> </th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
        <th>6</th>
        <th>7</th>
        <th>8</th>
        <th>9</th>
    </tr>
    <?php 
        for($i=1; $i<=9; $i++){
            echo '<tr>';
            for($j=1; $j<=9; $j++) {
                if($j==1){
                    echo '<th>' . $i . '</th>';
                }
                echo '<td>' . $j*$i . '</td>';
            }
            echo '</tr>';
        }
    ?>
</table>

この記事で作成する九九表はCSSで装飾をしています。
同じ見た目にしたい方は以下のCSSをコピペしてお使いください。

九九表のCSS
<style>
    .kuku-tb {
        border: 1px solid;
        border-collapse: collapse;
    }
    .kuku-tb th,
    .kuku-tb td {
        padding: 5px;
    }
    .kuku-tb th {
        border-right: 1px solid #fff;
        border-bottom: 1px solid #fff;
        background-color: #bbb;
        width: 30px;
    }
    .kuku-tb tr:first-child th{
        border-bottom: none;
    }
    .kuku-tb tr:first-child th:first-child {
        border-bottom: 1px solid #fff;
    }
    .kuku-tb tr:first-child th:last-child {
        border-right: none;
    }
    .kuku-tb tr:last-child th {
        border-bottom: none;
    }
    .kuku-tb td {
        text-align: center;
    }
    p {
        font-weight: bold;
    }
</style>

STEP1 まずはハードコーディング(手打ち)で九九表を作成する

慣れてくるまでの間は、for文を組むときは出力結果をとりあえずハードコーディング(手打ち)してみるのがポイントです。

具体的に書くと以下の通りです。

※長くなるため4の段以降は省略します

// 九九表をハードコーディングする
<table class="kuku-tb">
    <tr>
        <th> </th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
        <th>6</th>
        <th>7</th>
        <th>8</th>
        <th>9</th>
    </tr>
    <!-- 1の段 -->
    <tr>
        <th>1</th>
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
        <td>5</td>
        <td>6</td>
        <td>7</td>
        <td>8</td>
        <td>9</td>
    </tr>
    <!-- 2の段 -->
    <tr>
        <th>2</th>
        <td>2</td>
        <td>4</td>
        <td>6</td>
        <td>8</td>
        <td>10</td>
        <td>12</td>
        <td>14</td>
        <td>16</td>
        <td>18</td>
    </tr>
    <!-- 3の段 -->
    <tr>
        <th>3</th>
        <td>3</td>
        <td>6</td>
        <td>9</td>
        <td>12</td>
        <td>15</td>
        <td>18</td>
        <td>21</td>
        <td>24</td>
        <td>27</td>
    </tr>

    <!-- 4の段以降はいったん省略 -->

</table>

出力結果

九九表(ハードコーディング)

最初にハードコーディングをする目的は、こうすることでどの部分が繰り返し処理に置き換えられるかが視覚的にイメージしやすくなるためです。

例えば今回の九九表では、trタグやその中のthタグ、tdタグの部分が繰り返されており、「ここをfor文で書き換えられそうだな」とあたりが付けやすくなります。

これにより、頭のリソースに余裕が生まれ、処理をイメージしやすくなります。

STEP2 行(trタグ)だけをfor文で作成する

次も一気に処理を書くのではなく、まずは大枠である行(trタグ)の部分をfor文に置き換えてみます。

<table class="kuku-tb">
    <tr>
        <th> </th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
        <th>6</th>
        <th>7</th>
        <th>8</th>
        <th>9</th>
    </tr>
    <?php 
        // 1~9の段までのtrをとりあえずループで出力
        for($i=1; $i<=9; $i++){
            echo '<tr>';
            echo '<td>' . $i . '</td>';
            echo '</tr>';
        }
    ?>
</table>

出力結果

九九表(trタグのみ出力)

この段階では明らかに求めている結果とは違う出力になっていますが、行(trタグ)をfor文で出力できたという点に着目してみましょう。
このあとさらに足りない部分を追加して処理を補っていきます。

STEP3 行(trタグ)の中の各列をfor文で作成する=二重ループの構築

次に、②で出力した行(trタグ)の中に各列の値=九九の計算結果を出力するようにプログラムを追記・修正していきます。

<table class="kuku-tb">
    <tr>
        <th> </th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
        <th>6</th>
        <th>7</th>
        <th>8</th>
        <th>9</th>
    </tr>
    <?php 
        for($i=1; $i<=9; $i++){
            echo '<tr>';
            // ***** この部分を追記・修正 *****
            /**
             * i行目のj列目を計算
             */
            for($j=1; $j<=9; $j++) {
                echo '<td>' . $i * $j . '</td>';
            }
            // ******************************
            echo '</tr>';
        }
    ?>
</table>

出力結果

九九表(左端見出し列抜け)
ケケンタ

ここまで来ると、いよいよ九九表らしくなってきましたね!

この段階ではfor文内にさらにfor文を組み込む二重ループになっているため、もしかしたらイメージが湧かないという方も多いかもしれません。

ここで行っていることは、以下のような単純な計算です。

【iの段(i行目)】i×j列目
————————————
【1の段(1行目)】1×1=1、1×2=2、1×3=3、1×4=4……
【2の段(2行目)】2×1=2、2×2=4、2×3=6、2×4=8……

STEP4 最後に各行(trタグ)の先頭にthタグを付ける=見出し列の作成

最後に、各行(trタグ)の先頭のthタグが抜けており九九表全体が左に1マスずれてしまっているため、各行の先頭列にのみthタグを出力するように修正します。

<table class="kuku-tb">
    <tr>
        <th> </th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
        <th>6</th>
        <th>7</th>
        <th>8</th>
        <th>9</th>
    </tr>
    <?php 
        for($i=1; $i<=9; $i++){
            echo '<tr>';
            for($j=1; $j<=9; $j++) {
                // ***** ここを追加 *****
                /**
                 * 各行の先頭列にのみthタグを出力
                 */
                if($j==1){
                    echo '<th>' . $i . '</th>';
                }
                // *********************
                echo '<td>' . $j*$i . '</td>';
            }
            echo '</tr>';
        }
    ?>
</table>

出力結果

九九表(完成形)

各行の先頭列=$jが1のときにだけthタグを出力しています。
これにより、左端の見出し列もfor文で出力され、九九表が完成形になりました。

for文を書くときはまずハードコーディングしてみる

ケケンタ

以上がPHPでfor文を使用して九九表を作成する考え方・流れでした。

今回のfor文を使用した九九表作成では

  • まずハードコーディング(手打ち)で最終的な出力結果を形にしてしまい
  • その上で「では目の前の処理の内、どの部分をfor文に置き換えられるか」

という流れで処理を組んでいきました。

そして、足りない部分を少しずつ補う形で最終形を組み立てました。

for文を書く上での最も重要なポイントは

for文を書くときはいったんハードコーディングしてしまうこと

です。

そうすれば、処理全体の中でどこが繰り返されているのかが視覚化され、結果的に頭のリソースに余裕が生まれ処理を考えやすくなります。

ケケンタ

for文は初心者の方にとっての鬼門です。
僕も使いこなせるようになるまで苦労しました。
しかし、練習を続けることで必ず習得することが可能です。

この記事では敢えてテーブルの行見出し(thタグだけで構成されているtrタグの部分)はfor文に置き換えませんでした。
練習として、「この部分をfor文に置き換えると…?」をお試しいただくのも良い練習になるかと思います。

また、以下のページではfor文の練習問題もご用意していますので、ご興味があればぜひ覗いてみて下さい。

それでは最後までご覧いただきありがとうございました。

また別の記事でお会いできれば光栄です。

また、もしもPHPの独学に限界を感じているのであれば、一度プログラミングスクールの利用を検討してみるのも良いかもしれません。

無料でPHPが学べるプログミングスクール

この記事が気に入ったら
フォローしてね!

この記事が良いと思ったらシェアしてね!

コメント

コメントする

CAPTCHA


目次