2015年9月21日

PHP if構文その5 〜else if文〜

«
»

Pocket

今回はelse if文について書きたいと思います。
 
まずはサンプルプログラムを見てみましょう。
 


<?php

$box = 2;

if ($box == 1) { 
    echo "number is 1.";
}

if ($box == 2) { 
    echo "number is 2.";
}

if ($box == 3) { 
    echo "number is 3.";
}

実行結果

php if

解説

まず、原則としてプログラムは上の行から順に実行されていきます。
 
if ($box == 1) の条件には合致しないので、number is 1.は表示されません。
次に、if ($box == 2) の条件に合致したので、number is 2.が表示されます
最後に、if ($box == 3) の条件には合致しないので、number is 3.は表示されません。
 
ここまでは理解できると思います。
 
この時、プログラム全体としては合計3回の条件判定を行っています
if ($box == 1) 、if ($box == 2) 、if ($box == 3)の3回です。
 
この3回という数字を覚えておいて、次のサンプルを見てみましょう。

サンプルプログラム


if ($box == 1) { 
    echo "number is 1.";
}

else if ($box == 2) { //ifからelse ifに変わっています
    echo "number is 2.";
}

else if ($box == 3) { // ifからelse ifに変わっています
    echo "number is 3.";
}

実行結果

php else if

解説

実行結果としては先程の例と変わらず、number is 2.だけが表示されます。
では何が違うのでしょうか。
 
実はプログラム全体としての条件判定の回数が変わります
 
if ($box == 1) の条件には合致しないので、number is 1.は表示されません。
ここまではさっきのプログラムと同じです。
 
しかし、今度は
if ($box == 2) ではなく、else if($box == 2) となっています。
elseには「それ以外の場合は」という意味があることは前回のブログで書きました。
 
そんなelseとifを組み合わせた else if構文はこんな意味になります。
 

else if ($box == 2) ⇒ 上の条件に合致しない場合で、もし・・・

 
上の条件とはここではif ($box == 1) のことを指します
もちろん今回は変数boxの中身が2ですので、$box == 1の条件には合致しません。
かつ、$box == 2の条件には合致しますのでnumber is 2.が表示されます。
 
そして、最後のelse if ($box == 3) の部分ですが、else if が
「上の条件に合致しない場合で、もし・・・」という意味ですので、
else if ($box == 2)に既に合致してしまっている場合、
上の条件に合致しない場合という制約を満たさないので、条件判定を行いません。

 
つまり、プログラム全体としての条件判定が2回になります。
 
先程のサンプルと比べて条件判定の回数が1回減ったことがわかると思います。
else if ($box == 2)で合致したんだからelse if ($box == 3)は
もうやらなくていいじゃん、という効率化した
書き方になります。

else ifは知らなくてもプログラムは書ける

今、紹介したとおり、else if構文は知らなくてもifをつなげることで
プログラムを書くことはできます。
 
スクリーンショット 2015-09-21 7.31.24
 
しかし、else ifを使うことで不要な条件判定を減らすことができます
今回は3回が2回になったことで33%の効率化に成功しました。
 
これが1億回が3333万回になったとしたら、処理が早くなり、具体的なイメージとしては
検索結果を表示するスピードが33%早くなることになります。
 
スクリーンショット 2015-09-21 7.32.04
 
スクリーンショット 2015-09-21 7.32.40

まとめ

・else if 文は上の条件に合致しない場合で、もし・・・」
・if文だけでも同じことはできるが、else ifの方が効率的である

【関連する記事】