alienHRNの訓練日記

IT業界初心者で勉強中。

◆20200907 PHP foreach文 代替構文 問題演習

本日の授業内容

要約

○foreach文

配列を用いて繰り返し処理を行う際に使用する。

foreach(処理に使う配列+as+配列内の値を入れる変数)

 

. PHP_EOL

ソースコード上で改行させるコード

 

○foreach文 連想配列を用いた使用法

foreach(処理に使う配列+ as+ $key => $value) {
  echo $key;←キー
  echo $value;←要素内の値
}

 

○代替構文

HTMLとPHPを混合して構文をつくる

if、 while、 for、 foreach、等を使用する

※if文を使った使用例

<? php if (第一条件式) : ?>
    HTMLコード
<? php elseif(第二条件式):?>
    HTMLコード
<? php else:?>
    HTMLコード
 <? php endif;?>

<?php 条件式:?>ではじめ、 <? php end〇〇;?>で終わる形にする。

 

<注意>HTML上でPHPで記述したものを表示させるときは<php echo・・・?>を記述

 

 

 
以下板書
 
〇foreach文
11章 05_foreach.phpより


  < h1 > foreach文1</ >
  <? php
    $numList = [100200300];
echo '<pre>';
var_dump($numList);
echo '</pre>';

foreach($numList as $value) {
  // 繰り返し処理に使用する配列
  // +as
  // + 配列内の値を入れる変数(好きな名前でおk。よく使われるのは$val、$value

  echo $value. '<br>';

  // foreachは配列を使った繰り返し処理
  // asの左側に配列以外の変数を指定するとWarningエラーになる。
  // 配列内の値をasの右側で宣言した変数に代入しながら繰り返し処理を実行
}


// 問題
// 好きな食べ物を配列で管理してforeachを使ってリストとして出力する事
echo '<h2>問題 好きな食べ物</h2>'.PHP_EOL;

echo '<ul>'.PHP_EOL;
// .PHP_EOL→ソースコード上でも改行させるコード
// これを入れてあげないとソースコードが見づらくなる!
$eat = ['りんご''みかん''めろん'];
foreach($eat as $value) {
  echo '<li>'.$value. '</li>'. '<br>'.PHP_EOL;
};
echo '</ul>';
              ?>




  〇foreach文 キーと要素内の値を使用した場合
11章 06_foreach.phpより

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

foreach($items as $key => $value) {
  // 繰り返し処理に使用する配列
  // +as
  // + 配列内の値を入れる変数(好きな名前でおk。よく使われるのは$key => $value
  echo '$key:'.$key.PHP_EOL;
  echo '$value:'.$value.PHP_EOL;
}



// 問題
// 四国番号と県庁所在地
// 連想配列で管理
// 5行2列テーブルで表示
// 最初の行は「県番号」「県庁所在地」という見出し行にする

$sikoku = [
  '1' => '高松市'//愛媛県
  '2' => '松山市'//香川県
  '3' => '徳島市'//徳島県
  '4' => '高知市'//高知県
];

echo '<table border="1" style=border-collapse:collapse;>'.PHP_EOL;
echo
' <tr>'.
      '<th>'. '県番号'. '</th>'.
      '<th>'. '県庁所在地'. '</th>'.
      '</tr>'.PHP_EOL;
foreach($sikoku as $key => $value) {
  echo
  '<tr>'.
        '<td>'.$key. '</td>'.
        '<td>'.$value. '</td>'.
     '</tr>'.PHP_EOL;
};
echo '</table>'.PHP_EOL;

  ?>


  〇代替構文

  <? php if (第一条件式):?>
    HTMLコード
    <? php elseif(第二条件式):?>
      HTMLコード
      <? php else:?>
        HTMLコード
        <? php endif;?>




          <h1  > 代替構文1</h1 >

          <h2>1回目の出力</h2>//制御構文
          <?php
            if ($value == 2) {
  echo '<ul>';
  echo '<li>水</li>';
  echo '<li>お茶</li>';
  echo '<li>コーラ</li>';
  echo '</ul>';
else if ($value == 1) {
  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?>

 

 問題演習

<!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>


  <h2>問題</h2>
  <p>四国配列を使ってテーブルを表示させること・代替構文使用</p>

  <table border="1" style=border-collapse:collapse;>

    <tr>
      <th> 県番号 </th>
      <th> 県庁所在地 </th>
    </tr>
    <?php
    $sikoku = [
      '1' => '高松市'//愛媛県
      '2' => '松山市'//香川県
      '3' => '徳島市'//徳島県
      '4' => '高知市'//高知県
    ];
    ?>

    <?php foreach ($sikoku as $key => $value) : ?>

      <tr>
        <td> <?php echo $key ?> </td>
        <td> <?php echo $value ?> </td>
      </tr>
    <?php endforeach?>
  </table>

  <h2>問題</h2>
  <p>date関数を使ってアクセス時の秒数を取得すること</p>
  <p>秒数が0~20の場合は中華料理のメニューを表示</p>
  <p>秒数が21~40の場合は日本料理のメニューを表示</p>
  <p>秒数が41~59の場合はイタリアンのメニューを表示</p>
  <p>確認のため秒数も表示する事</p>

  <?php
  $menu = [
    'ラーメン・ギョーザ・チャーハン',
    '寿司・納豆・わさび',
    'ピザ・ワイン・カルパッチョ',
  ];
  ?>

  <!-- <h1><?php echo $menu[0?> </h1> -->

  <?php
  $timestamp = date('s');
  echo $timestamp;
  echo '<br>';
  ?>

  <?php if ($timestamp <= 20) : ?>
    <h1><?php echo $menu[0]; ?> </h1>
  <?php elseif ($timestamp <= 40) : ?>
    <h1> <?php echo $menu[1]; ?> </h1>

  <?php else : ?>
    <h1> <?php echo $menu[2]; ?> </h1>
  <?php endif?>

</body>

</html>

問題解答をブラウザで表示

f:id:alienHRN:20200907152029p:plain

ブラウザ表示

12章 02_other.phpより問題演習

<?php
$osList = [
  'Windows',
  'Mac',
  'Linux',
];
$items = [
  'f-001' => 'りんご',
  'f-002' => 'みかん',
  'd-001' => '水',
];
?>
<!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>代替構文2</title>
</head>

<body>
  <h1>制御構文</h1>
  <h2>1回目の出力</h2>
  <?php
  for ($i = 0$i < count($osList); $i++) {
    echo '<div class="box">';
    echo '<h3>おすすめ商品 No.' . ($i + 1. '</h3>';
    echo '<p>' . $osList[$i. '</p>';
    echo '</div>';
  }
  ?>

  <h2>2回目の出力</h2>
  <?php
  foreach ($items as $key => $val) {
    echo '<div class="box">';
    echo '<h3>' . $val . '</h3>';
    echo '<p>商品コード:' . $key . '</p>';
    echo '</div>';
  }
  ?>

 
------ここから問題--------------
  <h2>代替構文</h2>
  <h2>1回目の出力</h2>
  <php? for ($i=0 ; $i < count($osList); $i++):?>
    <div class="box">
      <h3>おすすめ商品 No.<?php echo ($i + 1?> </h3>
      <p> <?php echo $osList[$i]; ?> </p>
    </div>
    <php? endfor ; ?>



      <h2>2回目の出力</h2>
      <?php foreach ($items as $key => $val) : ?>

        <div class="box">
          <h3> <?php echo $val ?> </h3>
          <p> 商品コード:<?php echo $key ?> </p>
        </div>
      <?php endforeach?>




</body>

</html>

 

 

f:id:alienHRN:20200907160322p:plain

問題文のブラウザ表示