概要と目標 プログラム効率よく書くための、
反復を理解しよう。
同じ処理を何度も行う場合には、反復という繰り返し構文が便利です。
同じ処理を何度も行う場合には、反復という繰り返し構文が便利です。
条件に一致している間や、特定の回数同じ処理を繰り返す制御構文。while文 や for 文などがある。
while文は、条件式が true の間、同じ処理を繰り返す制御構文。
while (条件式) {
// 条件式が true の間繰り返す処理
}
<?php 〜 ?> の間に10回繰り返す while文を作成
$i = 1; // ループ用変数の初期値
while ( $i <= 10 ) {
// $i が 10 以下の間繰り返す
echo $i. '回目のループ<br>';
$i = $i + 1; // ループ用変数の加算
}
インクリメントとは、++ という演算子の事で、
変数名の後ろに記述すれば、自分自身(変数)に「1」を加算する という処理になる。
従って、上記コード内にある $i = $i + 1; は、インクリメントを使うことで、短く記述することができる。
$i = $i + 1; を $i++;に変更する
$i = 1; // ループ用変数の初期値
while ( $i <= 10 ) {
// $i が 10 以下の間繰り返す
echo $i. '回目のループ<br>';
$i++; // ループ用変数の加算(++: インクリメント。自分自身に 1 を足す)
}
2つの値を比較する時に用いる演算子を、比較演算子と呼ぶ。while文や、後で紹介するfor文の条件式は、
| 式 | 説明 |
|---|---|
A > B |
A が B より大きい間繰り返す |
A < B |
A が B より小さい間繰り返す |
A >= B |
A が B 以上の間繰り返す |
A <= B |
A が B 以下の間繰り返す |
A == B |
A が B と等しい時だけ繰り返す |
A != B |
A が B と異なる時だけ繰り返す |
while文は必ず終了するように作る。
$i = 0; ← ループ用変数の初期値
while ( $i < 10) { ← ループの継続条件
echo 'Looping...' . $i;
$i++; ← ループ用変数の増減
}
反復は、いつか条件が false になるように作る。
ループ用変数の初期値、ループの継続条件、ループ用変数の増減を
for (ループ用変数の初期値; ループ継続条件; ループ用変数の増減) {
// 条件式が true の間繰り返す処理
}
<?php 〜 ?> の間に10回繰り返す for文を作成
for ( $i = 1; $i <= 10; $i++ ) {
// $i が 10 以下の間繰り返す
echo $i .'回目のループ<br>';
}
年齢を選択するセレクトボックスや、日付を選択するセレクトボックスは、反復を活用することで、効率よく生成できる。
<dd> 〜 </dd> の間にfor文を活用した 年齢を選択するセレクトボックスを作成
<select id="age" name="age">
<?php
for ( $i = 10; $i <= 70; $i++) {
echo '<option value="'. $i .'歳">'. $i .'歳</option>';
}
?>
</select>
date関数を用いれば、
PHPで現在の日時を取得するには、date関数を使う。
date関数は、引数に取得したい項目のフォーマットを指定することで、様々な値を取得できる。
date関数date(フォーマット);
戻り値: 取得項目をフォーマットに当てはめた文字列
引数はPHPマニュアルを参照
| フォーマット | 説明 | |
|---|---|---|
| 年 | Y | 4桁の年。Ex: 2016 |
| y | 2桁の年。Ex: 16 | |
| 月 | m | ゼロ詰めの月。01 ~ 12 |
| n | ゼロなしの月。1 ~ 12 | |
| F | フルスペルの月。Ex: January | |
| M | 3文字形式の月。Ex: Jan | |
| 日 | d | ゼロ詰めの日。01 ~ 31 |
| j | ゼロなしの日。1 ~ 31 | |
| z | 年間の通算日。0 ~ 365 | |
| t | 月の日数。28 ~ 31 | |
| 時 | g | 12時間単位の時(ゼロなし)。1 ~ 12 |
| G | 24時間単位の時(ゼロなし)。0 ~ 23 | |
| h | 12時間単位の時。01 ~ 12 | |
| H | 24時間単位の時。00 ~ 23 | |
| 分 | i | ゼロ詰めの分。00 ~ 59 |
| 秒 | s | ゼロ詰めの秒。00 ~ 59 |
| 曜日 | l | フルスペルの曜日。Ex: Monday |
| D | 3文字形式の曜日。Ex: Mon | |
| w | 数値の曜日。0(日) ~ 6(土) | |
date関数を使ってみよう。date()関数を使って現在の日時を出力
<p>現在は、<?php echo date('Y年 m月 d日 H:i:s'); ?>です</p>
date_default_timezone_set関数date_default_timezone_set(タイムゾーン);
戻り値: タイムゾーンが無効 ・・・ false それ以外なら ・・・ true
引数はPHPマニュアルを参照
date_default_timezone_set()関数を使い、タイムゾーンを東京に変更
<?php
// タイムゾーンの設定(東京)
date_default_timezone_set('Asia/Tokyo');
?>
完成例を参考に「tranig」フォルダ内の「index.php」と「receive.php」を完成させて下さい。
<?php
date_default_timezone_set('Asia/Tokyo');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>練習問題5</title>
</head>
<body>
<h1><?php echo date('Y年 n月'); ?>の予約フォーム</h1>
<form action="receive.php" method="post">
<dl>
<dt><label for="date">希望日</label></dt>
<dd>
<?php echo date('Y年 n月'); ?>
<select id="date" name="date">
<?php
for ($i = 1; $i <= date('t'); $i++) {
echo '<option value="'. $i .'">'. $i .'日</option>';
}
?>
</select>
</dd>
</dl>
<p><input type="submit" value="送信"></p>
</form>
</body>
</html>
<?php
date_default_timezone_set('Asia/Tokyo');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>練習問題5</title>
</head>
<body>
<h1>入力確認</h1>
<dl>
<dt>希望日</dt>
<dd>
<?php echo date('Y年 n月'); ?>
<?php echo htmlspecialchars($_POST['date'], ENT_QUOTES, 'utf-8'); ?>日
</dd>
</dl>
<p><a href="./">予約フォームに戻る</a></p>
</body>
</html>
解答例は全問題のチェックボックスが on になるとご覧いただけます。
while文 や for文 は繰り返し処理を行う制御構文です。
セレクトボックスるの生成など、何度も同じ処理を行う時に活用します。
date関数で取得できる。