PHPで九九表を作る方法
PHPで九九表を作ってみました。以前JavaScript版は作りましたがPHPでの作成はまだだったので挑戦。といっても変数の指定ぐらいしか違いがありませんでしたが...。
今回はテーブルのデザインを変更、ホバー時に該当のセルの色が変わる機能を追加実装してみました。
↓以前JavaScriptで作った九九表はこちら
JavaScriptで作る九九表 - ウェブ学のすすめ
練習問題
九九表をPHPで作りなさい
for文のネスト
tableをfor文で生成する場合は、「行」を基準に設定する
ソースコード
PHP
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>PHPで作る九九表</title> <link href="style.css" rel="stylesheet"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> </head> <body> <h1>九九表</h1> <table> <?php for($row=0;$row<=9;$row++){ echo "<tr>"; for($col=0; $col<=9; $col++){ if( $col==0 && $row==0){ echo "<th> </th>"; //一番左上のセル生成 } else if($col==0 && $row!==0){ //行見出し生成(一番左上のセルを除く) echo "<th>".$row."</th>"; } else if($row==0){ echo "<th>".$col."</th>"; //列見出し生成(一番左上のセルを除く) } else{ echo "<td>".$col*$row."</td>"; //その他のセル(行×列) } } echo "</tr>"; } ?> </table> <script> $(function(){ var overcells = $("table td"), hoverClass = "hover", current_r, current_c; overcells.hover( function(){ var $this = $(this); (current_r = $this.parent().children("table td")).addClass(hoverClass); (current_c = overcells.filter(":nth-child("+ (current_r.index($this)+2) +")")).addClass(hoverClass); }, function(){ current_r.removeClass(hoverClass); current_c.removeClass(hoverClass); } ); }); </script> </body> </html>
CSS
@charset "utf-8"; table { width: auto; border-spacing: 0; font-size:14px; } table th { color: #fff; padding: 8px 15px; background: #258; background:-moz-linear-gradient(rgba(34,85,136,0.7), rgba(34,85,136,0.9) 50%); background:-webkit-gradient(linear, 100% 0%, 100% 50%, from(rgba(34,85,136,0.7)), to(rgba(34,85,136,0.9))); font-weight: bold; border-left:1px solid #258; line-height: 120%; text-align: center; text-shadow:0 -1px 0 rgba(34,85,136,0.9); box-shadow: 0px 1px 1px rgba(255,255,255,0.3) inset; } table th:last-child { border-right:1px solid #258; box-shadow: 2px 2px 1px rgba(0,0,0,0.1),0px 1px 1px rgba(255,255,255,0.3) inset; } table tr td { padding: 8px 15px; border-bottom: 1px solid #84b2e0; border-left: 1px solid #84b2e0; text-align: center; } table tr td:last-child { border-right: 1px solid #84b2e0; box-shadow: 2px 2px 1px rgba(0,0,0,0.1); } table tr { background: #fff; } table tr:nth-child(2n+1) { background: #f1f6fc; } table tr:last-child td { box-shadow: 2px 2px 1px rgba(0,0,0,0.1); } table td.hover { background:#bbd4ee; cursor:pointer; } table td.hover:hover { background:#84f4f4; cursor:pointer; }
解説
一番外側のfor文(for文1)
10回処理を繰り返します。
<?php for($col=0; $col<=9; $col++){ <tr>を出力 外側から2番目のfor文(for文2)を処理 </tr>を出力 } ?>
↓
出力結果
<tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr> <tr>for文2の処理</tr>
外側から2番目のfor文(for文2)
10回処理を繰り返します。
<?php for($col=0; $col<=9; $col++){ if( $col==0 && $row==0){ echo "<th> </th>"; //一番左上のセル生成 } else if($col==0 && $row!==0){ //行見出し生成(一番左上のセルを除く) echo "<th>".$row."</th>"; } else if($row==0){ echo "<th>".$col."</th>"; //列見出し生成(一番左上のセルを除く) } else{ echo "<td>".$col*$row."</td>"; //その他のセル(行×列) } } ?>
↓
出力結果
//$row=0の場合 <th></th><th>1</th><th>2</th>・・・<th>8</th><th>9</th> //$row=1の場合 <th>1</th><td>1</td><td>2</td>・・・<td>8</td><td>9</td> //$row=2の場合 <th>2</th><td>2</td><td>4</td>・・・<td>16</td><td>18</td> ・ ・ ・ //$row=9の場合 <th>9</th><td>9</td><td>18</td>・・・<td>72</td><td>81</td>