条件判断

初歩

おはようございます(このメッセージは朝・昼・夜で変わります)。

こういった条件判断は次のように書きます。

<p>
<?php
  date_default_timezone_set('Asia/Tokyo');
  $h = date("H");
  if ($h < 10) {
    echo "おはようございます";
  } elseif ($h < 18) {
    echo "こんにちは";
  } else {
    echo "こんばんは";
  }
?>
</p>

if は「もしも……」,elseif は「そうでくて,もしも……」,else は「そうでなければ……」という意味です。

C や C++ や Java や JavaScript では else if,Perl や Ruby では elsif と綴りますが,PHP では elseif です。ただし,PHP では else if と書いても同じ動作をします。

上のプログラムは下のように中括弧 { } を省略して書いてもかまいません。

<p>
<?php
  date_default_timezone_set('Asia/Tokyo');
  $h = date("H");
  if ($h < 10)
    echo "おはようございます";
  elseif ($h < 18)
    echo "こんにちは";
  else
    echo "こんばんは";
?>
</p>

ifelseifelse が複数の命令を含む場合は,上のような中括弧 {...} が必須になります。

応用

画像も加えてみましょう。あらかじめ朝・昼・夜の画像 asa.jpg,hiru.jpg,yoru.jpg を用意しておきます。

<p>
<?php
  date_default_timezone_set('Asia/Tokyo');
  $h = date("H");
  if ($h < 10) {
    echo '<img src="asa.jpg" alt="朝"> おはようございます';
  } elseif ($h < 18) {
    echo '<img src="hiru.jpg" alt="昼"> こんにちは';
  } else {
    echo '<img src="yoru.jpg" alt="夜"> こんばんは';
  }
?>
</p>

このように,echo の文字列の中にさらに " が入る場合は,echo "..."; の代わりに echo '...'; を使うのが一つの手です。もう一つの手は,内側の "\" と書きます:

<p>
<?php
  date_default_timezone_set('Asia/Tokyo');
  $h = date("H");
  if ($h < 10) {
    echo "<img src=\"asa.jpg\" alt=\"朝\"> おはようございます";
  } elseif ($h < 18) {
    echo "<img src=\"hiru.jpg\" alt=\"昼\"> こんにちは";
  } else {
    echo "<img src=\"yoru.jpg\" alt=\"夜\"> こんばんは";
  }
?>
</p>

応用

東京オリンピック(2020年7月24日)まであと 1003 日です。

<p><?php
  date_default_timezone_set('Asia/Tokyo');
  $s = mktime(0,0,0,7,24,2020) - time();
  if ($s > 0) {
    $d = (int)($s / (60 * 60 * 24));
    echo "東京オリンピック(2020年7月24日)まであと $d 日です。";
  } else {
    echo "(祝)東京オリンピック!";
  }
?></p>

mktime(時, 分, 秒, 月, 日, 年) は1970年元旦からの秒数を求めます。(int) は小数点以下を切り捨てて整数に直すことを意味します。/ は割り算,% は剰余(割った余り)です。

"あと $h 時間 $m 分 $s 秒" のように "..." の中には $h などの変数をそのまま書き込むことができます。ただし,$h の直後にスペースがないと誤動作することがありますので,スペースを入れたくないときは "あと{$h}時間{$m}分{$s}秒" のように {...} で囲んでおきます。なお,'...' の中には変数を書き込めません。


Last modified: