sit in a circle and chat happily

PHP 4日目

投稿日:2022-01-18
更新日:2022-03-24
php

第10章:while文・do while文

※JSと同じなので授業ではおさらいだけ

  <h1>while文</h1>
  <?php
  echo '<h2>1回目の出力</h2>';
  $num = 0;
  while ($num < 3) {
    echo $num;
    $num++;
  }
ブラウザ出力内容
フローチャート

【問題】do while文

  echo '<h2>問題:7が出るまで</h2>';
  // 乱数を生成して変数に代入
  // 7が出るまで(7以外の時)は繰り返し処理を続行する
  // 何回目で7が出たか表示する
  echo '<p>【ますだ解答】</p>';
  $num = '';
  $count = 0;
  do {
    $num = mt_rand(0, 10);
    echo $num . ' ';
    $count++;
  } while ($num !== 7); {
    echo "<p>{$count}回</p>";
  }

  echo '<p>【別解答】</p>';
  $count = 0;
  $num = mt_rand(0, 10);
  echo $num . ' ';
  $count++;
  while ($num !== 7) {
    $num = mt_rand(0, 10);
    echo $num . ' ';
    $count++;
  }
  echo "<p>{$count} 回目</p>";
  echo '<h2>問題:ゾロ目が出るまで</h2>';

  $count = 0;
  do {
    $num1 = mt_rand(1, 9);
    $num2 = mt_rand(1, 9);
    $num3 = mt_rand(1, 9);
    echo "{$num1}{$num2}{$num3}<br>";
    $count++;
  } while ($num1 !== $num2 || $num1 !== $num3 || $num2 !== $num3); {
    // (!$num1 === $num2 && $num3) //別の書き方
    echo "<p>{$count}回</p>";
  }
ブラウザ出力内容

【さらに問題】乱数を出して、3の倍数が5回出たらストップ

フローチャート
  echo "<h2>【問題】乱数・3の倍数5回</h2>";
  // 「0~9」の乱数を生成
  // 3の倍数が5回出力されたらSTOP
  // 何回繰返したかも表示
  echo "<p>【ますだ解答】</p>";
  $count1 = 0;
  $count2 = 0;
  do {
    do {
      $num = mt_rand(0, 9);
      echo "{$num} ";
      $count1++;
    } while ($num % 3 !== 0); {
      $count2++;
    }
  } while ($count2 < 5); {
    echo "<p>{$count1}回</p>";
  }

  echo "<p>【先生解答1:if文】</p>";
  $count = 0; //繰返し処理回数をカウント
  $targetCount = 0; //3の倍数をカウント
  do {
    $randomNum = mt_rand(0, 9); //乱数生成
    echo $randomNum . ' ';
    // 3の倍数か判定してカウントアップ
    if ($randomNum % 3 === 0) {
      $targetCount++;
    }
    // 繰返し回数をカウントアップ
    $count++;
  } while ($targetCount < 5);
  echo "<p>{$count}回</p>";

  echo "<p>【先生解答2:for文】</p>";
  $targetCount = 0;
  for ($i = 0; $targetCount < 5; $i++) {
    $randomNum = mt_rand(0, 9);
    echo $randomNum . ' ';
    if ($randomNum % 3 === 0) {
      $targetCount++;
    }
  }
  echo "<p>{$i}回</p>";

  echo "<p>【別解答1:for文】</p>";
  $count = 0;
  for ($i = 0; $i < 5; $i++) {
    do {
      $num = mt_rand(0, 9);
      echo "{$num} ";
      $count++;
    } while ($num % 3 !== 0);
  }
  echo "<p>{$count}回</p>";
ブラウザ出力内容

第11章:for文・foreach文

for文と配列

  $itemList = [
    'いちご', //0
    'みかん', //1
    'りんご', //2
  ];

  echo '<h2>1回目の出力</h2>';
  for ($i = 0; $i < count($itemList); $i++) {
    echo $itemList[$i] . '<br>';
  }

  echo '<h2>2回目の出力</h2>' . PHP_EOL;
  $code = '<ul>' . PHP_EOL;
  for ($i = 0; $i < count($itemList); $i++) {
    $code .= '<li>' . $itemList[$i] . '</li>' . PHP_EOL;
  }
  $code .= '</ul>' . PHP_EOL;
  echo $code;
  // PHP_EOL(PHP End Of Line)
  // すべて大文字で書かれたものは定数(暗黙のルール)
  // PHPの場合、定数は先頭に「$」がつかない
  // PHP_EOLの中には「改行コード」が入っている
ブラウザ出力内容

PHP_EOL:改行コード用定数

「PHP_EOL」は「PHP End Of Line」を意味し、改行コードが入った定数になる。
「PHP_EOL」を使用することで見やすいソースコードを出力できる。

<body>
  <h1>for文と配列</h1>
  <h2>1回目の出力</h2>いちご<br>みかん<br>りんご<br><h2>2回目の出力</h2>
<ul>
<li>いちご</li>
<li>みかん</li>
<li>りんご</li>
</ul>
</body>

foreach文の使い方

foreach文は配列の要素がある分だけ繰返し処理を実行させる。

foreach文:要素内の値のみ使用

foreach (参照する配列 as 要素内の値を格納する変数) {
    配列要素がある限り実行される繰返し対象処理
}

foreach文の後の「()丸カッコ」内に「参照する配列」「as」「要素内の値を格納する変数」の3つを記述する。要素内の値を格納した変数は繰返し対象処理内で使用することができる。

フローチャート
  $numList = [100, 200, 300];
  echo '<pre>';
  var_dump($numList);
  echo '</pre>';

  foreach ($numList as $value) {
    echo $value . '<br>';
  }
ブラウザ出力内容

【問題】foreach文:

  echo '<h2>問題:好きな映画</h2>' . PHP_EOL;
  // 1.3つ配列管理
  // 2.foreach文を使用
  // 3.番号付きリストで表示
  // 4.PHP_EOLを使用
  $movieList = [
    '紅の豚',
    'となりのトトロ',
    '千と千尋の神隠し',
  ];
  // 解答例1
  $code = '<ol>' . PHP_EOL;
  foreach ($movieList as $value) {
    $code .= '<li>' . $value . '</li>' . PHP_EOL;
  }
  $code .= '</ol>' . PHP_EOL;
  echo $code;

  // 解答例2
  echo '【別回答】';
  echo '<ol>' . PHP_EOL;
  foreach ($movieList as $value) {
    echo '<li>' . $value . '</li>' . PHP_EOL;
  }
  echo '</ol>' . PHP_EOL;
ブラウザ出力内容
<h2>問題:好きな映画</h2>
<ol>
<li>紅の豚</li>
<li>となりのトトロ</li>
<li>千と千尋の神隠し</li>
</ol>
【別回答】
<ol>
<li>紅の豚</li>
<li>となりのトトロ</li>
<li>千と千尋の神隠し</li>
</ol>

foreach文:キーと要素内の値を使用

foreach (参照する配列 as キー用変数 => 値用変数) {
    配列要素がある限り実行される繰返し対象処理
}

foreach文の後の「()丸カッコ」内に「参照する配列」「as」「キー用変数」「=>」「値用変数」の5つを記述する。

要素内のキーと値を格納した変数は繰返し対象処理内で使用することができる。

  $items = [
    'f-001' => 'りんご',
    'f-002' => 'みかん',
    'd-001' => '水',
  ];
  echo '<pre>';
  var_dump($items);
  echo '</pre>';

  foreach ($items as $key => $value) {
    echo ' $key : ' . $key;
    echo ' $value : ' . $value;
    echo '<br>';
  }
ブラウザ出力内容

【問題】foreach文:2

  echo '<h2>問題:ビートルズ</h2>' . PHP_EOL;
  // 楽器のパートを部屋の名前(key)
  // メンバーを値(value)にして管理
  // ※キーには全角文字が使える

  $beatles = [
    'ギター1' => 'ジョン・レノン',
    'ギター2' => 'ジョージ・ハリスン',
    'ベース' => 'ポール・マッカートニー',
    'ドラム' => 'リンゴ・スター',
  ];
  foreach ($beatles as $key => $value) {
    echo "{$key}担当:{$value}<br>" . PHP_EOL;
  }
ブラウザ出力内容
<h2>問題:ビートルズ</h2>
ギター1担当:ジョン・レノン<br>
ギター2担当:ジョージ・ハリスン<br>
ベース担当:ポール・マッカートニー<br>
ドラム担当:リンゴ・スター<br>

第12章:代替構文

代替構文

制御構文をHTMLコード部分で使用する場合は、代替構文で記述すると見やすいプログラムになる。

代替構文はif文、while文、foreach文、switch文に提供される。
「{」(開始中カッコ)を「:」(コロン)で記述する。
「}」(閉じ中カッコ)を制御構文の種類に合わせて「endif;」「endwhile;」「endfor;」「endforeach;」「endswitch;」と記述する。

<?php
$value = 1;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>代替構文1</title>
</head>
<body>
  <h1>代替構文1</h1>
  <h2>1回目の出力</h2>
  <?php
  if ($value == 1) {
    echo '<ul>';
    echo '<li>水</li>';
    echo '<li>お茶</li>';
    echo '<li>コーラ</li>';
    echo '</ul>';
  } else if ($value == 2) {
    echo '<ul>';
    echo '<li>クッキー</li>';
    echo '<li>チョコ</li>';
    echo '<li>マシュマロ</li>';
    echo '</ul>';
  }
  ?>

  <h2>2回目の出力</h2>
  <?php if ($value == 1) { ?>
    <ul>
      <li>水</li>
      <li>お茶</li>
      <li>コーラ</li>
    </ul>
  <?php } else if ($value == 2) { ?>
    <ul>
      <li>クッキー</li>
      <li>チョコ</li>
      <li>マシュマロ</li>
    </ul>
  <?php } ?>

  <h2>3回目の出力</h2>
  <?php if ($value == 1) : ?>
    <ul>
      <li>水</li>
      <li>お茶</li>
      <li>コーラ</li>
    </ul>
  <?php elseif ($value == 2) : ?>
    <ul>
      <li>クッキー</li>
      <li>チョコ</li>
      <li>マシュマロ</li>
    </ul>
  <?php endif; ?>
<?php
/*
◆PHPブロックを分割してHTMLを記述できる
  echo命令を使わずにHTMLが書けるので便利
◆代替構文はHTMLがメインになる「ビューファイル」上で使用する
  最後の } (閉じ中カッコ)が「end〇〇;」になるので
  可読性が高くなる。
  また、うっかり削除することを回避できる
  ※PHPメインの「ロジックファイル」で
    代替構文を利用することはほぼ無い
*/
?>
ブラウザ出力内容

【おさらい問題】乱数を使ってメニュー表示

<?php
$menuNo = mt_rand(0, 2);
// 乱数を使ってメニュー表示を切り替える
// 0:中華
// 1:和食
// 2:イタリアン
// 各料理をリストで3つずつくらい表示する
// リストはHTMLで記述する
?>
<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>おさらい:代替構文
  </title>
</head>

<body>
  <h2>【問題】おさらい:代替構文</h2>
  <h2>おすすめメニュー</h2>
  <?php if ($menuNo == 0) : ?>
    <h2>中華</h2>
    <ul>
      <li>チャーハン</li>
      <li>天津飯</li>
      <li>餃子</li>
      <li>ラーメン</li>
      <li>かに玉</li>
      <li>エビチリ</li>
    </ul>

  <?php elseif ($menuNo == 1) : ?>
    <h2>和食</h2>
    <ul>
      <li>おそば</li>
      <li>うどん</li>
      <li>てんぷら</li>
      <li>寿司</li>
      <li>かつ丼</li>
      <li>うな重</li>
    </ul>

  <?php elseif ($menuNo == 2) : ?>
    <h2>イタリアン</h2>
    <ul>
      <li>ペペロンチーノ</li>
      <li>ボロネーゼ</li>
      <li>ピザ</li>
      <li>アクアパッツァ</li>
      <li>ティラミス</li>
    </ul>
  <?php endif; ?>
</body>
ブラウザ出力内容

<body>
  <h2>【問題】おさらい:代替構文</h2>
  <h2>おすすめメニュー</h2>
      <h2>和食</h2>
    <ul>
      <li>おそば</li>
      <li>うどん</li>
      <li>てんぷら</li>
      <li>寿司</li>
      <li>かつ丼</li>
      <li>うな重</li>
    </ul>

  </body>

コメント

  <h2>【補足】コメント記述の仕方</h2>
  <!-- HTMLコメント -->
  <?php
  //PHPコメント
  ?>
  <h2>【補足】コメント記述の仕方</h2>
  <!-- HTMLコメント -->
  </body>

PHPでコメント記述すれば、閲覧者側で見ることができない。

カテゴリー