PHPを勉強し始めたけどfor文でつまずいてる……
どう考えてプログラムを組んで良いかイメージできない……
今回はこのようなお悩みをお持ちの方に向けて
九九表作成で学ぶ、for文を書くときの考え方
を解説していきます。
- PHPのfor文の書き方のイメージが掴み切れない方
- PHPを学習し始めたばかりの方
- PHPで九九表を作成したい方
- 二重ループを理解したい方
for文はプログラミング初心者の方にとって鬼門のひとつと言われています。
if文までは順調と思っていたのに、for文でつまずいてしまったという方も多いのではないでしょうか。
この記事をご覧いただくことで、どんな手順で考えていけばfor文を上手く組むことができるのかが分かります。
PHPのことを体系的に学びたい方にはこちらの書籍がおすすめです。
(僕自身が初めてPHPを学ぶとき実際に使用した本です)
PHP本格入門[上] ~プログラミングとオブジェクト指向の基礎からデータベース連携まで
大塚 正登/著 技術評論社/出版|Amazon
PHPにおける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文を組んでいけば良いのかを解説していきます。
【実践解説】九九表作成
今回作成する九九表の最終的な出力結果
九九表プログラム(完成形)
<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
<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 まずはハードコーディング(手打ち)で九九表を作成する
具体的に書くと以下の通りです。
※長くなるため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タグ)を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文は初心者の方にとっての鬼門です。
僕も使いこなせるようになるまで苦労しました。
しかし、練習を続けることで必ず習得することが可能です。
また、以下のページではfor文の練習問題もご用意していますので、ご興味があればぜひ覗いてみて下さい。
それでは最後までご覧いただきありがとうございました。
また別の記事でお会いできれば光栄です。
また、もしもPHPの独学に限界を感じているのであれば、一度プログラミングスクールの利用を検討してみるのも良いかもしれません。
無料でPHPが学べるプログミングスクール
コメント