PHPのプログラミングメモ第3回です。
【コードの格納先】
>> github.com/conti0513
【関連記事】
- 【PHP第1回】プログラミングメモ/プログラミングメモのコツ/環境構築
- 【PHP第2回】変数・定数・データ型・演算子
- 【PHP第3回】条件分岐・ループ処理
- 【PHP第4回】関数
- 【PHP第5回】配列
- 【PHP第6回】いろいろな関数(文字列を検索・文字列をソート)
- 【PHP第7回】コード記載時の注意点
条件分岐
if文
- 1 もし・・・の場合、〜する if
- 2 もし・・・の場合、〜する。そうじゃない場合、〇〇〇する。if else
- 3 もし・・・の場合、〜する。そうでなくて、もし△△△の場合、〇〇〇する if elseif
構文
// if文の書き方
//
// if (条件1) {
// 条件1がtrueの時の処理
// } else if (条件2){
// 条件2がtrueの時の処理
// } else {
// それ以外の場合の時の処理
//}
// 条件の書き方の例
// $a < $b --- $a が $b より小さければtrue
// $a <= $b --- $a が $b 以下ならばtrue
// $a > $b --- $a が $b より大きければtrue
// $a >= $b --- $a が $b 以上ならばtrue
// $a == $b --- $a と $b が等しければtrue (値を比較)
// $a === $b --- $a が $b が等しければtrue (値と型を比較) // データ比較を行う場合はこちらを利用するのがベター
// !$a --- $aでなければtrue
// sample code 1
$age = 60;
if ($age < 20) {
echo "未成年です。";
} else if ($age >= 60) {
echo "シニアです。";
} else {
echo"成年です。";
}
// result
シニアです。
注意点 インデントは揃えること
- ブロックの始まり、終わりは同じインデントにする
- ブロック内では必ずインデントをつける
ダメな例
if (////) {
$name = 'kato'; // ブロック内でインデントがついていない
}
function getUser() {
//
} // ブロックの始まり、終わりが同じインデントになっていない
良い例
if (////) {
$name = 'kato'; // ブロック内でインデントがついている
} // ブロックの始まりと終わりが同じインデントになっている
function getUser() {
//
}
// sample code 2
// 整数型の2つの変数(num1, num2)を宣言
// num1 - num2 が偶数、奇数、0で「even number」「odd number」「0」と表示させるような条件式を書く
$num1 = 15;
$num2 = 15;
// 計算結果を$diffに代入
$diff = $num1 - $num2;
// 条件式は上から実行されるので、「0」のパターンを先に書く
if ($diff === 0) {
echo "0".PHP_EOL;
} elseif ($diff % 2 === 1) {
echo "odd number".PHP_EOL;
} elseif ($diff % 2 === 0) {
echo "even number".PHP_EOL;
}
// result
0
三項演算子
// 三項演算子
// if文と似ているが、三項演算子は演算子の1つなので結果として式を返す
// if文のように条件に応じた処理を記述するものではない点に注意
// 条件 ? 条件がtrueの時の処理 : 条件のがfalseの時の処理
// sample code 1
$age = 19;
echo $age < 20 ? "未成年です" : "成年です"; // 可読性を上げるために"?"の前後に半角スペースを入れること
// result
未成年です
// sample code 2
$int_num1 = 49;
$int_num2 = 1;
$str_reslt = (($int_num1 + $int_num2) < 50 ) ? '50未満' : '50以上'; // 可読性を上げるために"?"の前後に半角スペースを入れること
echo $str_reslt;
echo PHP_EOL;
// result
50以上
■イコールの数による違い
// sample code
// ===を使った場合
// int型
$value1 = 1;
// str型
$value2 = "1";
//型の比較を行う
if ($value1 === $value2){
echo "同じです";
} else {
echo "違います";
}
// result
違います
switch文
- もし・・・の場合、〜する。
- または×××の場合、〇〇〇する。
- または…
// if文と比較してあまり利用されないが、文法として押さえておく
// switch (条件){
// case 値1:
// 処理1;
// break;
// case 値2:
// 処理2;
// break;
// case 値3:
// 処理3;
// break;
// default: // どれにも該当しない場合の処理
// break;
// }
// sample code
$pref = "東京";
switch ($pref) {
case "東京":
case "神奈川":
case "千葉":
echo "関東です";
break;
default:
echo "該当なし";
break;
}
// result
関東です
ループ処理
「〜の間」とある条件の間はずっと処理を繰り返したい場合、while文かfor文を使う。
for文(繰り返し文)
- ・・・の間、〜する。
// for文の書き方
// for(初期条件; ループの終了条件;ループ毎に行う処理){
// ループの中で行う処理
// }
// break;ループを抜ける
// contenue; 処理を中断し次のループに進む
// sample code 1
// 1から10まで数え、5になったらストップする
for ($i = 1; $i <= 10; $i++){
if ($i === 6) {
break;
}
echo $i . PHP_EOL;}
// result
1
2
3
4
5
// sample code 2
// for文と条件式の組み合わせ
// 30 ~ 60までの数字の中で2で割ったら奇数となる整数を数え、その個数を出力する
// 注意点 for と ifを組み合わせるときは、ifが入れ子(ネスト)にならないように注意する
// 数字の個数をカウントする空の変数 $count を定義
$count = 0;
// 開始条件:30 → 終了条件:60、$1に1足す
for ($i = 30; $i <= 60; $i++){
// 2で割り切れる かつ 奇数(2で割って余りが1)の場合$countに1をたす
if ($i % 2 === 0 && $i / 2 % 2 === 1){
$count++;
}
}
// 最後に$countを出力して個数を確認する
echo $count,PHP_EOL;
// sample code 3
// for文を使用した計算
// 1000未満の「3と7の倍数」の10番目に大きい数を出力する
// 数字の個数をカウントする空の変数 $count を定義
$count = 0;
// 開始条件:1000 → 終了条件:1、$1から1引く
for($i = 1000; $i >= 1; $i--){
// 3と7の倍数があれば$countを「1」ずつ増やす
if ($i % 3 === 0 && $i % 7 === 0) {
$count++;
}
// $countが「10」以下のときの「$i」を表示。「break;」でループから抜け出す。
if ($count >= 10) {
// countが何番目かを出力
echo $count.PHP_EOL;
// cauntが10番目(10番目に大きい数)を出力
echo $i. PHP_EOL;
// 「break;」でループから抜け出す
break;
}
}
// sample code 4
// 以下の図形をforを使って出力
// #
// ###
// #####
// 段数をn段に設定
// 繰り返し回数を$iに格納
// ひしがた上段の処理
$n = 3;
for($i = 0; $i < $n; $i++){
// スペースを出力するためのカウントを$jに格納する
// $iの数(菱形の段数)に応じてループ回数が変化→スペースを出力する
for($j = 0; $j < ($n - 1) - $i; $j++){
echo " ";
}
// # を出力するためのカウントを$kに格納する
// $iの数(菱形の段数)に応じてループ回数が変化→0を出力する
for($k = 0; $k <= $i * 2; $k++){
echo "#";
}
echo PHP_EOL;
}
【公式ドキュメント】
>> for
foreach文
// sample code 1
// foreach(配列 as $value){
// ループの中で行う処理
// }
$colors = array("red", "blue", "yellow");
foreach($colors as $value)
{echo $value . "\n";}
// result
red
blue
yellow
// sample code 2
// foreach(連想配列 as $key =>$value){
// ループの中で行う処理
// }
$userScores = array( "tanaka" => 90, "yamada" => 80, "suzuki" => 70, );
foreach($userScores as $name =>;$score){
echo "{$name}さんの点数は{$score}点です。".PHP_EOL;}
// result
tanakaさんの点数は90点です。
yamadaさんの点数は80点です。
suzukiさんの点数は70点です。
while文
- while文(繰り返し文)
- ・・・の間、〜する。
// while文の書き方
// 式がtrueの間、処理を繰り返す
//
// while(式){
// 実行したい処理
// }
// 無限ループにならないように式を書くこと
// sample code
$i = 1;
while ($i <= 10){
echo $i . "\n";
$i++;
}
// result
1
2
3
4
5
6
7
8
9
10
// sample code 3
// 100 → 200 までの数字 1桁目が5になったらループを終了
// 変数$1を100で初期化 → 200までループ
echo "-----",PHP_EOL,"for文",PHP_EOL,"-----",PHP_EOL;
for($i = 100; $i <= 200; $i++){
// 条件式 1桁目が7の数字を判定
if ($i % 10 === 5) {
echo $i.PHP_EOL;
// 1回目の処理で求める数字が出力されるため、処理を抜ける
break;
}
}
echo "-----",PHP_EOL,"while文",PHP_EOL,"-----",PHP_EOL;
// 変数$1を100で初期化 → 200までループ
$i = 100;
while($i <= 200){
if ($i % 10 === 5) {
echo $i.PHP_EOL;
// 1回目の処理で求める数字が出力されるため、処理を抜ける
break;
}
$i++;
}
echo "-----",PHP_EOL,"do-while文",PHP_EOL,"-----",PHP_EOL;
// 変数$1を100で初期化 → 200までループ
$i = 100;
do {
if ($i % 10 === 5) {
echo $i.PHP_EOL;
// 1回目の処理で求める数字が出力されるため、処理を抜ける
break;
}
$i++;
} while ($i <= 200);
// result
-----
for文
-----
105
-----
while文
-----
105
-----
do-while文
-----
105
条件分岐を書くときの注意点
- 条件で期待する処理が変わる場合はテストすること
- 境界線テストの方法を利用がベターな場合がある