PHP講座#6

今回の記事もPHP講座です!プログラムをたくさん書いて理解を深めてくださいね。
 それでは今回も張り切っていきましょう!

前回の復習

 前回の記事では算術演算子と文字列演算子について勉強しました。

前回の練習問題の解答

1問目

 岩ちょこは22歳です。岩ちょこの年齢を$ageという名前の変数に入れて、条件分岐を使って二十歳以上か未成年かを判別するプログラムを書いてみてください。(出力する文字列はお任せします)



解答

<?php
$age = 22;
if($age < 20) {
  $text = "未成年です";
} else {
  $text = "成人しています";
}
echo $text."<br>";
?>

2問目

 変数$numberは一桁の整数です。この一桁の変数が3より小さい時は"small"を、6以上の時は"large"を、それ以外の時は"normal"を出力するプログラムを作成してください。



解答

<?php
$number = 6;
if($number < 3) {
  $text = "small";
} elseif($number < 6) {
  $text = "normal";
} else {
  $text = "large";
}
echo $text. "<br>";
?>

3問目

 次の数字は、5人の生徒が数学のテストの点数です。

17, 18, 43, 76, 97
 この5人の数学のテストの平均点を求めるプログラムを作成し、その平均点が50点未満なら"bad"を、70点以上なら"excellent"を、それ以外なら"good"を出力するプログラムを作成してください。



解答

<?php
/*平均点を求める*/
$total = 17;
$total += 18;
$total += 43;
$total += 76;
$total += 97;
$average = total / 5.0;
/*平均点の値によって出力を変える*/
if($average < 50) {
  echo "bad<br>";
} elseif($average < 70) {
  echo "good<br>";
} else {
  echo "excellent<br>";
}
?>

今回の学習内容

 今回は条件式について勉強していきます。
 前回の記事で条件式が成り立っていたら処理を実行するとか書きましたが、条件式の書き方を教わってないんだけど!?となっていた方もいると思います。
(ごめんなさい。1つの記事にまとめて書いたら分量が多すぎて、「これはまずいな」ってなって、よし分割しようという経緯があってこうなりました)
 そこで今回は条件式の書き方をじっくりと説明する記事を書くことになりました。

 条件式を書く際には、比較演算子と論理演算子という2種類の演算子を使います。どんな演算子があるのかを表で見ていきましょう。

比較演算子

演算子 具体的な式 演算子の説明
== $a == $b 2つの変数$aと$bを型変換した後の値が同じ場合にtrue
=== $a === $b 2つの変数$aと$bの型と値が同じ場合にtrue
!= $a != $b 2つの変数$aと$bを型変換した後の値が違う場合にtrue
!== $a !== $b 2つの変数$aと$bの型か値のどちらかでも違う場合にtrue
<> $a <> $b 2つの変数$aと$bを型変換した後の値が違う場合にtrue
< $a < $b 2つの変数$aと$bの値が$aが$bより小さい場合にtrue
> $a > $b 2つの変数$aと$bの値が$aが$bより大きい場合にtrue
<= $a <= $b 2つの変数$aと$bの値が$aが$b以下の場合にtrue
>= $a >= $b 2つの変数$aと$bの値が$aが$b以上の場合にtrue
<=> $a <=> $b $aが$bより小さい場合に負の値、$aと$bが等しいときに0、
$aが$bより大きいときに正の値


論理演算子

演算子 演算子の説明
! trueとfalseを入れ替える
&& 2つの真偽値が両方ともtrueの場合のみtrue
|| 2つの真偽値が両方ともfalseの場合のみfalse
and 2つの真偽値が両方ともtrueの場合のみtrue
or 2つの真偽値が両方ともfalseの場合のみfalse
xor 2つの真偽値がfalseとtrueならtrue、一致していたらfalse

 かなりたくさんありますが一つ一つは非常にわかりやすいので、プログラムを動かしながら見ていきましょう!!

比較演算子

<?php
$length = 15;
$width = 15.0;
$number_large = 2;
$number_small = 1;
/*比較演算子===*/
if($length === $width) {
  echo "2つの変数の型と値は同じです";
}
/*比較演算子==*/
if($length == $width) {
  echo "型変換後の2つの変数の値は同じです";
}
/*比較演算子<*/
if($number_small < $number_large) {
  echo "変数$number_largeの値は$number_smallの値より大きい";
}
/*比較演算子<=*/
if($number_small <= $number_large) {
  echo "変数$number_largeの値は$number_smallの値以上である";
}
?>

 表で紹介したものをすべて覚える必要はなく、このソースコードに書いたものを覚えておけば残りのものについても書けます。
 それではこのソースコードに使われているif文の条件式についてを、比較演算子に注目して説明していきましょう。

if($length === $width) {
 echo "2つの変数の型と値は同じです<br>";
}
 この条件式で使われている比較演算子"==="は変数の値の型と変数の値の両方が一致しているときのみ、この条件式の部分はtrueになります。trueになった時だけ{ } の中は実行されます。
 今回の場合、"$length === $width"の部分は、$lengthはint型なのに対し、$widthはfloat型となっており、2つの変数の型が異なるので、条件式はfalseになります。そのため{ } の中は実行されません。

if($length == $width) {
 echo "型変換後の2つの変数の値は同じです<br>";
}
 この条件式で使われている比較演算子"=="は変数の型を揃えた後で、値が一致しているときのみ、この条件式の部分はtrueになります。trueになった時だけ{ } の中は実行されます。
 今回の場合、"$length == $width"の部分は、$lengthの中にはint型の値15が入っており、$widthの中にはfloat型の値15.0が入っている。2つの変数の型をfloat型に揃えると、$lengthの値と$widthの値は一致し条件式はtrueになります。そのため{ } の中は実行されます。

if($number_small < $number_large) {
 echo "変数$number_largeの値は$number_smallの値より大きい<br>";
}
 この条件式で使われている比較演算子"<"は数学の不等号と一緒で、左側より右側のほうが大きい値のとき、この条件式の部分はtrueになります。trueになった時だけ{ } の中は実行されます。
 "<" の部分を ">" や "<=" や ">=" に変えることで、未満や、以上、以下を表現できます。

論理演算子

<?php
$under = 1;
$top = 4;
$number = 2;
/*論理演算子&&*/
if($under <= $number && $number <= $top) {
  echo "$numberは、$under以上かつ$top以下の値です<br>";
}
/*論理演算子||*/
if($number <= $under || $top <= $number) {
  echo "$numberは、$under以下又は$top以上の値です<br>";
}
/*論理演算子!*/
if(!($number == 2)) {
  echo "変数$numbeの値は2ではありません<br>";
}
?>

 論理演算子も表で説明したものをすべて覚える必要はありません。数学が得意な人は、かつ の条件の時は"&&"で、または の条件の時は"||"で、"!" は条件式が成り立った時にfalse、成り立たなかったときにtrueになるように、判定をひっくり返す役割があるんだな!と見るだけで済んでしまうかもしれませんね。(;'∀')
 折角なのでゆっくり見ていきましょうか。

if($under <= $number && $number <= $top) {
 echo "$numberは、$under以上かつ$top以下の値です<br>";
}
 論理演算子"&&"の前と後ろに比較演算子を用いた条件式があるのがわかると思います。この論理演算子"&&"を使うと、2つの条件式の両方がtrueにならないと、総合的な条件式の評価がtrueにならないようにするという演算子です。
 「両方成り立ってたら実行してやんよ!」みたいな感じですかね。

if($number <= $under || $top <= $number) {
 echo "$numberは、$under以下又は$top以上の値です<br>";
}
 論理演算子"||"の前と後ろに比較演算子を用いた条件式があるのがわかると思います。この論理演算子"||"を使うと、2つの条件式の片方でもtrueになれば、総合的な条件式の評価がtrueになるという演算子です。
 「片方成り立ってたら実行してあげますね~ ^ ^」みたいな感じですかね。

if(!($number == 2)) {
echo "変数$numbeの値は2ではありません<br>";
}
 論理演算子"!"の後ろに比較演算子を用いた条件式があるのがわかると思います。この論理演算子"!"を使うと、論理演算子"!"の後ろにある条件式がtrueになれば総合的な条件式の評価がfalseに、後ろにある条件式がfalseになれば総合的な条件式の評価がtrueになるという演算子です。
 天邪鬼みたいな感じですかね。
 比較演算子の中に"!="や"!=="のようなものがありますが、これは論理演算子"!"と比較演算子"=="や"==="を合体させたものと考えることですっきり覚えられます!!

 xorはしばらく使う機会はないと思うので、今回は説明をしませんが、そういう演算子もあるんだなぐらいは覚えておいてもいいかもしれません。

まとめ

 今回は、比較演算子と論理演算子について学びました。この2種類の演算子が理解できないと、条件分岐とそのあとに学習する繰り返し文も理解できなくなるので、ここで頭を整理してから次の記事に進みましょう。よくわからないところや個々の解説を詳しくして欲しい等あればコメント欄で気軽に言っていただければ多分反応します。

練習問題

1問目

 岩ちょこは22歳で、親友の年齢は20歳です。二人の年齢の差が2歳である場合は"Yes"をそれ以外の場合は"No"を出力するプログラムを条件分岐を用いて書きなさい。

2問目

 このプログラムはどのような値を出力するでしょうか。考えた後、実際に試してみてください。

<?php
$num_a = 4;
$num_b = 4;
if($num_a !== $num_b) {
  echo "foo!<br>";
} else {
  echo "yeah!!<br>";
}
?>

3問目

 変数$numberに6を入れた場合と8を入れた場合を試してください。このプログラムはどのような出力するでしょうか。

<?php
$number = 4;
if($number % 2 == 0 && $number % 3 == 0) {
  echo "6の倍数です<br>";
} elseif($number % 3 == 0) {
  echo "3の倍数です<br>";
} elseif($number % 2 == 0) {
  echo "2の倍数です<br>";
}
?>

最後まで見ていただきありがとうございます。また別の記事でお会いできることを祈っております。



www.iwachoco-blog.com
www.iwachoco-blog.com