クロピグログ

職業訓練で学んだことまとめ

【PHP授業四日目】foreach文、代替構文

foreach文

・配列の要素がある分だけ繰返し処理する

f:id:chromiumpig:20200907102649p:plain

  $numList = [100200300];

  foreach ($numList as $value) {
    echo $value . '<br>';
  }

・出力結果↓

100

200

300

 

●foreachは配列を使った繰返し処理

・asの左側に配列以外の変数を指定するとWarningエラーになる

・配列の部屋数分、繰返し処理をする

・配列内の値をasの右側で宣言した変数に代入しながら繰返し処理を実行

 

●問題

好きな食べ物を配列で管理すること

foreachを使って番号なしリストを出力せよ

  $foodList = [
    'スーパーで売ってるティラミス',
    'モンブランのスパゲティ'
  ];
  $foodListCode = '<ul>' . PHP_EOL;
  foreach ($foodList as $value) {
    $foodListCode .= '<li>' . $value . '</li>' . PHP_EOL;
  }
  $foodListCode .= '</ul>' . PHP_EOL;
  echo $foodListCode;

・この書き方は、ロジック とビューをわけるとき(大人数作業のとき)に使用する

 

●問題別解

  echo '<ul>' . PHP_EOL;
  foreach ($foodList as $value) {
    echo  '<li>' . $value . '</li>' . PHP_EOL;
  }
  echo  '</ul>' . PHP_EOL;

・この書き方は、個人で書くときなどスピード重視の時に使用する

 

 

f:id:chromiumpig:20200907112431p:plain

  $items = [
    'f-001' => 'りんご',
    'f-002' => 'みかん',
    'd-001' => '水',
  ];

  foreach ($items as $key => $val) {
    echo 'key:' . $key . '<br>';
    echo 'val:' . $val . '<br>';
  }

 ・出力結果↓

key:f-001
val:りんご
key:f-002
val:みかん
key:d-001
val:水

 

●問題

四国の県番号と県庁所在地を連想配列で管理

5行2列テーブルで表示

最初の行は「県番号」「県庁所在地」という見出し行にする

  $forceCountry = [
    36 => '徳島',
    37 => '高松',
    38 => '松山',
    39 => '高知',
  ];
  echo  PHP_EOL . '<table border="1" 
    style="border-collapse: collapse">' . PHP_EOL;
  echo '<tr>' . PHP_EOL;
  echo '<th>県番号</th>' . PHP_EOL;
  echo '<th>県庁所在地</th>' . PHP_EOL;
  echo '</tr>' . PHP_EOL;
  foreach ($forceCountry as $key => $val) {
    echo '<tr>' . PHP_EOL;
    echo '<td>' . $key . '</td>' . PHP_EOL;
    echo '<td>' . $val . '</td>' . PHP_EOL;
    echo '</tr>' . PHP_EOL;
  }
  echo '</table>' . PHP_EOL;

  ・出力結果↓

県番号 県庁所在地
36 徳島
37 高松
38 松山
39 高知

 

 

代替構文(だいたいこうぶん)

  <?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>';
    }
  ?>

↓こういう書き方思いつく

  <?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 } ?>

↓代替構文利用

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

f:id:chromiumpig:20200907135438p:plain

●さっきの四国問題で代替構文すると

  <?php
  $forceCountry = [
    36 => '徳島',
    37 => '高松',
    38 => '松山',
    39 => '高知',
  ];
  ?>
  <table border="1" style="border-collapse: collapse">
    <tr>
      <th>県番号</th>
      <th>県庁所在地</th>
    </tr>
    <?foreach ($forceCountry as $key => $val) :?>
    <tr>
      <td>
        <?echo $key;?>
      </td>
      <td>
        <?echo $val;?>
      </td>
    </tr>
    <?endforeach?>
  </table>

 

●問題

date関数を使って秒数を取得すること

秒数が0~19の場合は中華料理のメニューを表示

秒数が20~39の場合は日本料理のメニューを表示

秒数が40~59の場合はイタリアン料理のメニューを表示

確認のため秒数も表示すること

  <?echo '<h2>' . date('現在s秒'. '</h2>';
  $time = date('s');
  if($time <= 19 ):?>
  <p>チャーハン</p>
  <p>ラーメン</p>
  <p>回鍋肉</p>
  <?elseif ($time <= 39) :?>
  <p>味噌汁</p>
  <p>かつ丼</p>
  <p>お寿司</p>
  <?else :?>
  <p>ピザ</p>
  <p>スパゲティ</p>
  <p>ドリア</p>
  <?endif;?>

 

●練習1

  <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>1回目の出力</h2>
  <?for ($i = 0$i < count($osList); $i++) :?>
  <div class="box">
    <h3>おすすめ商品 No.
      <?echo $i + 1;?>
    </h3>
    <p>
      <?echo $osList[$i];?>
    </p>
  </div>
  <? endfor?>

 

●練習2

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

↓代替構文

  <?foreach ($items as $key => $val) :?>
  <div class="box">
    <h3>
      <?echo $val;?>
    </h3>
    <p>商品コード:
      <?echo $key;?>
    </p>
  </div>
  <?endforeach;?>