条件分岐

トップ > PHP入門 > 条件分岐

目次

広告

条件分岐について

ここまでのプログラムは、書かれた内容を上から順番に実行していくのみのプログラムでした。ですが条件分岐を使用すれば、条件によって処理内容を変更することができるため、複雑なプログラムを作成することができるようになります。

具体的には、以下のような書式で条件分岐を行います。

if (条件) {
  条件に一致した場合に実行するプログラム
} else {
  条件に一致しなかった場合に実行するプログラム
}

このように書くことで、条件に一致したかどうかで処理内容を振り分けることができます。ちなみに if は英語で「もし~なら」、else は「そうでなければ」という意味です。

以下に、条件分岐を使用したプログラムを記載します。

<?php

$sample = 10;

if ($sample > 5) {
  echo "変数sampleの内容は5より大きいです。";
} else {
  echo "変数sampleの内容は5より小さいです。";
}

?>

このプログラムを実行すると、ブラウザに 変数sampleの内容は5より大きいです。 と表示されます。

このプログラムでは $sample > 5 の部分が条件を指定している部分です。> は普通の数学と同様「~より大きい」という意味です。プログラムの初めの方で $sample = 10; という部分がありますが、この部分で $sample には 10 を代入しています。この数値を例えば 3 に変更すると、画面に表示される文字は 変数sampleの内容は5より小さいです。 になります。実際に数値を変更して実験してみましょう。

なお、if の直後の半角スペースや { の後の改行や echo の前のインデントなどに、文法的な意味はありません。例えば

<?php

$sample = 10;

if($sample>5){echo"変数sampleの内容は5より大きいです。";}
else{echo "変数sampleの内容は5より小さいです。";}

?>

このように書いても動作しますが、読みづらいので(プログラムを編集しづらいので)通常は適度にスペースや改行を挿入します。

HTMLでは tablediv でマークアップする際など、インデントして読みやすくすることがありますが、それと同じことです。

条件に一致しなかった場合の処理について

上のプログラムでは、条件に一致しなかった場合($sample の中身が 5 より小さい場合)に 変数sampleの中身は5より小さいです。 と表示するようにしています。else に続いて、条件に一致しなかった場合の処理を書くことができます。ですが、条件に一致しなかった場合の処理は省略することができます。つまり

<?php

$sample = 10;

if ($sample > 5) {
  echo "変数sampleの内容は5より大きいです。";
}

?>

このようにすると、条件に一致しなかった場合は画面に文字が表示されなくなります。

インデントについて

条件分岐を使用してプログラムを書く場合、上のように {} の間の処理は、インデントをつけて書く事が多いです。これにより、どこからどこまでが条件分岐用の処理なのかが判りやすくなります。

PHPではプログラム中の改行が無視されるのと同様、タブや半角スペースでのインデントも無視されます。ですから、プログラムを読みやすくするために、適度に改行やインデントを入れるといいでしょう。(HTMLコーディングの際に、改行やインデントを入れるのと同じです。)

比較演算子について

上のプログラムは、数値の比較に > を使用しています。これは比較演算子と呼ばれるものですが、数値の比較には他にも以下のような比較演算子を使用することができます。

演算子 意味
== 等しい
!= 等しくない
> 右辺より大きい
>= 右辺以上
< 右辺より小さい
<= 右辺以下

ここで一つ注意点なのですが、PHPで「等しい」を意味する演算子は == です。例えば「$sample の中身が 10 ならば」という条件は以下のように指定します。

if ($sample == 10) {

間違えて if ($sample = 10) { と指定すると、意図したとおりにプログラムが動かなくなるので注意が必要です。(「$sample10 が代入できれば」と解釈されてしまいます。)

条件の複数指定

ここまでのプログラムは「条件に合うか合わないか」を判断するのみのプログラムでしたが、「条件1に合うか、もしくは条件2に合うか、どちらにも合わないか」というような、条件の複数指定も可能です。具体的には、以下のような書式になります。

if (条件1) {
  条件1に一致した場合に実行するプログラム
} elseif (条件2) {
  条件1に一致せず、条件2に一致した場合に実行するプログラム
} else {
  条件1と条件2の両方に一致しなかった場合に実行するプログラム
}

このように書くことで、条件を追加することができます。なお、elseif (条件) はいくつでも指定することができます。以下に、条件を複数指定したプログラムを記載します。

<?php

$sample = 7;

if ($sample == 10) {
  echo "変数sampleの内容は10です。";
} elseif ($sample > 5) {
  echo "変数sampleの内容は5より大きいです。";
} else {
  echo "変数sampleの内容は5より小さいです。";
}

?>

elseif ($sample > 5) の部分で、条件を追加しています。

真偽値の判定

定義済みの変数で紹介した TRUEFALSE を判定する場合、以下のように書けば判定できます。

<?php

$sample = TRUE;

if ($sample == TRUE) {
  echo "変数sampleの内容は真です。";
}
if ($sample == FALSE) {
  echo "変数sampleの内容は偽です。";
}

?>

ですが、省略して以下のように書かれることが多いです。

<?php

$sample = TRUE;

if ($sample) {
  echo "変数sampleの内容は真です。";
}
if (!$sample) {
  echo "変数sampleの内容は偽です。";
}

?>

このように、単に if (変数) { とすると、変数に TRUE が代入されていたり、文字や0以外の数値が代入されていた場合に条件が成立します。

また、if (!変数) { とすると、変数に FALSE が代入されていたり、NULL が代入されていたり、カラの文字や数値の0が代入されていた場合に条件が成立します。

AND条件とOR条件

これまで if (条件) としたときの条件は1つだけ指定してきましたが、複数の条件を組み合わせて1つの条件にすることもできます。具体的なプログラムを以下に記載します。

<?php

$sample_a = 5;
$sample_b = 7;

if ($sample_a == 5 and $sample_b == 7) {
  echo " 変数sample_aは5、変数sample_bは7です。";
} else {
  echo " 条件に一致しません。";
}

?>

このプログラムを実行すると、ブラウザに 変数sample_aは5、変数sample_bは7です。 と表示されます。条件指定の中にある and がAND条件で、論理演算子と呼ばれます。論理演算子には、以下のようなものがあります。

演算子 意味
and (もしくは && かつ(AND条件)
or (もしくは || または(OR条件)

例えば

if ($sample_a == 5 and $sample_b == 7)

の場合は「$sample_a5 で、かつ、$sample_b7 ならば」という条件になります。つまり、2つの条件が両方とも一致すれば処理が実行されるようになります。また

if ($sample_a == 3 or $sample_b == 2)

の場合は「$sample_a3 か、または、$sample_b2 ならば」という条件になります。つまり、2つの条件のうち、どちらか一方でも一致すれば処理が実行されるようになります。

また、条件はいくつでも指定することができる増す。例えば

if ($sample_a == 5 and $sample_b == 7 and $sample_c == 3)

の場合は「$sample_a5 で、かつ、$sample_b7 かつ、$sample_c3 ならば」という条件になります。つまり、3 つの条件がすべて一致すれば処理が実行されるようになります。

endifによる制御

これまで条件分岐は

<?php

$sample = 10;

if ($sample > 5) {
  echo "変数sampleの内容は5より大きいです。";
} else {
  echo "変数sampleの内容は5より小さいです。";
}

?>

このように書いてきましたが、以下のように書いてもまったく同じ意味になります。

<?php

$sample = 10;

if ($sample > 5) :
  echo "変数sampleの内容は5より大きいです。";
else :
  echo "変数sampleの内容は5より小さいです。";
endif;

?>

つまり、これまで条件によって実行される処理を {} で囲ってきましたが、処理の開始部分を : に変更し、さらに条件の終了部分を endif; に変更することができます。無理にこのような変更を行う必要はありませんが、うまく使うとプログラムを読みやすくすることができます。例えば

<?php

if ($sample > 5) {
  echo "<table border=\"1\">";
  echo "<tr>";
  echo "<td>変数sampleの内容は5より大きいです。</td>";
  echo "</tr>";
  echo "</table>";
} else {
  echo "<table border=\"1\">";
  echo "<tr>";
  echo "<td>変数sampleの内容は5より小さいです。</td>";
  echo "</tr>";
  echo "</table>";
}

?>

このようなプログラムを、以下のように書き換えることができます。

<?php if ($sample > 5) : ?>
  <table border="1">
  <tr>
  <td>変数sampleの内容は5より大きいです。</td>
  </tr>
  </table>
<?php else : ?>
  <table border="1">
  <tr>
  <td>変数sampleの内容は5より小さいです。</td>
  </tr>
  </table>
<?php endif; ?>

何度も echo を書く必要が無くなり、文字のエスケープも気にする必要がなくなります。
endif を使わずに上の書き方をすると条件の終了部分が <?php } ?> となってしまいますが、それよりは若干コードが読みやすくなります。

なお、これはあくまでも「こんな書き方もできる」というだけなので、無理に endif; を使う必要はありません。ただ、他の人が書いたプログラムを読んだ時に戸惑わないためにも、こんな書き方ができることは知っておいた方がいいでしょう。

switch文による処理の振り分け

同じ変数を比較して処理を振り分ける場合、switch を使用することでプログラムを判りやすく書くことができます。

<?php

$sample = 2;

switch ($sample) {
  case 1:
    echo "変数sampleは1です。";
    break;
  case 2:
    echo "変数sampleは2です。";
    break;
  case 3:
    echo "変数sampleは3です。";
    break;
  default:
    echo "変数sampleは1~3以外です。";
}

?>

この場合、実行結果は 変数sampleは2です。 になります。switch ($sample) で指定した変数をもとに条件分岐を行い、値によって case の部分に移動します。

breakswitch 文を抜けるための指定です。switch で処理を振り分ける場合、break を書かないとその下の処理も実行されてしまうので注意が必要です。(逆に、わざと break を省略して、複数の処理を実行させる場合もあります。)

三項演算子による処理の振り分け

三項演算子を使用すれば、条件が成立する場合としない場合に返す値を、1つの式で表すことができます。三項演算子を使用せずに ifelse で条件分岐をすることも可能ですが、場合によっては、三項演算子を使用すると処理をすっきりと書くことができます。

具体的には、以下のような書式で条件分岐を行います。

条件 ? 条件に一致した場合に返す値 : 条件に一致しない場合に返す値

以下に、三項演算子を使用したプログラムを記載します。

<?php

$sample = 10;

$string = $sample > 5 ? "5より大きい" : "5より小さい";

echo "変数sampleの内容は{$string}です。";

?>

慣れるまでは処理の内容を直感的に読み取れないかもしれませんが、その場合は if で条件分岐させても問題ありません。