20110608:PHPの基礎

Webプログラミングの基礎
PHPの基礎(4) ~switch,ループ
(2011/06/08)
政策情報学部
渡辺恭人
riho-m@cuc.ac.jp
メーリングリスト:riho-m-rg11@cuc.ac.jp:
資料ページ: http://www.cuc.ac.jp/~riho-m/rg11/
課題の例
• date関数とif構文を使って、曜日を日本語で表示させるプロ
グラムを作成しなさい。
– リファレンスマニュアルで調べる
• http://www.php.net/date
– 曜日を数字で得るには?⇒”w”
– 0,1,2,3,4,5,6を返す
• 今後は、UTF-8, BOMなしで保存するとともに以下を付け足し
てください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
プログラムが入る部分
</body>
2
課題の例~”w”を使った場合
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?php
<?php
$a = date("w");
if ($a == 0){
echo "日曜日です<br>";
} elseif ( $a == 1){
echo "月曜日です<br>";
} elseif ( $a == 2){
echo "火曜日です<br>";
} elseif ( $a == 3){
echo "水曜日です<br>";
} elseif ( $a == 4){
echo "木曜日です<br>";
} elseif ( $a == 5){
echo "金曜日です<br>";
} else {
echo "土曜日です<br>";
}
?>
</body>
3
条件分岐~switch構文~
• switchは、式の値を条件とする
– 複数の条件を指定できる
– If構文と同じことができる
• 読みやすいほうで記述すべき
4
switch構文のルール
switch ( 式 ) {
case 値1:
式が値1だったときの処理;
break;
case 値2:
式が値2だったときの処理;
break;
default:
式が値1でも値2でもないと
きの処理;
break;
}
• switch構文はcase句と一緒
に使う
• switch式の値が判定され、
caseの値に適合した処理が
実行される
• break句に到達すると、
switchブロックを抜ける
• break句がない場合、次の
case句やbreak句に移る。
• break句は省略できる
5
switch構文例(ファイル名:switch.php)
文字列の一部分を返
す関数
定義済みの定数で、ローカルのPHPバージョン番号
<?php
$version = substr(PHP_VERSION, 0, 1);
switch ($version) {
case 6:
print "PHPのバージョンは6です";
break;
case 5:
print "PHPのバージョンは5です";
break;
6
switch構文例(続き)
case 4:
print "PHPのバージョンは4です";
break;
case 3:
print "PHPのバージョンは3です";
break;
default:
print "PHPのバージョン3~6に該当しません";
}
?>
7
基本的な書き方例(ファイル名:tohoku.php)
<?php
$pref = "青森";
switch ($pref) {
case "青森":
print "あなたは東北地方出
身です。";
break;
case "岩手":
print "あなたは東北地方出
身です。";
break;
case "秋田":
print "あなたは東北地方出
身です。";
break;
case "宮城":
print "あなたは東北地方出身
です。";
break;
case "山形":
print "あなたは東北地方出身
です。";
break;
case "福島":
print "あなたは東北地方出身
です。";
break;
default :
print "あなたは東北地方出身
ではありません。";
break;
}
?>
8
breakを省略できる例
<?php
$pref = "青森";
switch ($pref) {
case "青森":
case "岩手":
case "秋田":
case "宮城":
case "山形":
case "福島":
print "あなたは東北地方出身です。";
break;
default :
print "あなたは東北地方出身ではありません。";
break;
}
?>
9
ループ
• for構文やwhile構文
• 同じプログラムを繰り返して(ループ)実行さ
せるための構文
• 条件式でループする回数を決める
10
for構文
• 初期化の式が実行される
• 終了条件を見て、ループを行うかどうかを判定(
TRUE/FALSE)
• 更新式で、ループ回数の更新(例、カウンタ1減らす
)
• TRUEなら、ループの最後まで実行して上に戻る
• FALSEなら、ループを終了させる
for (初期化式; 終了条件; 更新式) {
ループ中の処理
}
11
for構文の例
• 配列変数に格納された文字列を順に表示す
る
<?php
ファイル名:for1.php
$aisatsu[] = "おはよう";
$aisatsu[] = "こんにちは";
$aisatsu[] = "こんばんは";
for ($i = 0; $i < 3; $i++){
print $aisatsu[$i] . '<br />';
}
?>
12
for構文の例(入れ子)
• 入れ子(nesting)とは
– 例えば、ループの中に、ループがあるようなプロ
グラム
• 九九の表を作ってみましょう
– 1かける1から9かける9までを表示する表を作る
• 1の段から9の段まで(9回のループ)
• 各段には、1から9までをかける(1段につき9回のルー
プ)
• 表自体は、HTMLのTABLEで構成する
• <tr>から</tr>までが1行。<td>から</td>が要素
13
九九の表(for2.php)
<?php
print "<table border=1>";
for ($i = 1; $i <= 9; $i++) {
print "<tr><td>" . $i . "の段</td>";
for ($j = 1; $j <= 9; $j++){
$x = $i * $j;
print "<td>" . $i . "*" . $j . "=" . $x . "</td>";
}
print "</tr>";
}
print "</table>";
?>
14
九九の表
15
while構文
• Forに似ているが、条件判定だけを行う
– 判定を行う変数は、while文の中で変化させてル
ープ回数を制御
– ループ回数が決まってなかったり、条件によって
変わる場合は、while文が適している
• 無限ループに注意
– 条件文を誤ると永遠にループしてマシンパワーを
使い切ってしまう恐れがある
– continue句とbreak句をループ内で使用して、ルー
プを抜ける
16
while構文
• 形式
while ( 条件 ) {
ループ中の処理;
}
• continue
– ループ内の残り処理をスキップして条件式判定ま
で戻る
• break
– ループ処理を終了する
17
while構文例
• 無限ループとしてルー
プを行う
• 1から10までの偶数だ
けを出力する
<?php
$i = 1;
while (true) {
if ($i > 10) {
break;
}
if ($i % 2 == 0) {
print $i . "<br />";
}
$i++;
– $iが10より大きくなった
らbreakでループから脱
出する
}
?>
18
foreach文
• 指定した配列の要素の数の分だけループす
るための構文
– 挙動は、forやwhileと同じ
– 連想配列に対応
• 配列のキーが数値でない
– PHPにしかない
• 形式
foreach(配列名 as 変数名) {
ループ中の処理:
}
foreach(配列名 as キー変数 => 変数名) {
ループ中の処理;
}
19
foreach構文の例
<?php
$prof["name"] = "渡辺恭人";
$prof["born"] = "大阪府";
$prof["age"] = "41";
print "<table border=1>";
foreach($prof as $key => $value){
print "<tr><td>{$key}</td><td>{$value}</td></tr>";
}
print "</table>";
?>
20
課題(1)
• 前回の課題をswitch構文を使って書き直して
ください。
• できれば、date関数の引数は変更してくださ
い。例えば、”D”を使ってみる。
• 以上、作成したプログラムと実行結果をWord
にまとめ、メーリングリストに提出。
• ファイル名 例: kadai-0608-1-学籍番号.doc
• 締切: 6/14 18:00
21
課題(2)
• 1~30までの数字を順に表示し、3の倍数のと
き文字を大きくするなどして目立たせて表示
するプログラムを作成しなさい。
• さらに、できれば、3の付く数のときも目立た
せて表示させてください。
• 以上、作成したプログラムと実行結果をWord
にまとめ、メーリングリストに提出。
• ファイル名 例: kadai-0608-2-学籍番号.doc
• 締切: 6/14 18:00
22
課題(3)
• 災害関連のアプリケーションに関するサイト(
次ページ)を見て、関心を持ったアプリケーシ
ョンについてその内容(災害時のどのような
状況に対して役立つのか、など)について述
べ、感想を述べなさい。
– アプリケーションはいくつでも可
• Wordなどのワープロでまとめて、メールで
riho-m-rg11@cuc.ac.jpに提出
• ファイル名 例: kadai-0608-3-学籍番号.doc
23
• 締切: 6/14 18:00
災害関連アプリについてのサイト
• 災害対策に役立つアプリ
– http://b.hatena.ne.jp/articles/201103/3093
• Androidスマートフォンの災害対策アプリ、活用
術
– http://andronavi.com/2011/03/80790
• 災害関連アプリ特集
– http://www.appbank.net/2011/03/14/iphonenews/232668.php
• 災害対策用iPhoneアプリまとめ
– http://20kaido.com/archives/2661198.html