【PHP授業四日目】foreach文、代替構文
foreach文
・配列の要素がある分だけ繰返し処理する
・出力結果↓
100
200
300
●foreachは配列を使った繰返し処理
・asの左側に配列以外の変数を指定するとWarningエラーになる
・配列の部屋数分、繰返し処理をする
・配列内の値をasの右側で宣言した変数に代入しながら繰返し処理を実行
●問題
好きな食べ物を配列で管理すること
foreachを使って番号なしリストを出力せよ
・この書き方は、ロジック とビューをわけるとき(大人数作業のとき)に使用する
●問題別解
}
・この書き方は、個人で書くときなどスピード重視の時に使用する
$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 => '高知',
];
foreach ($forceCountry as $key => $val) {
}
・出力結果↓
県番号 | 県庁所在地 |
---|---|
36 | 徳島 |
37 | 高松 |
38 | 松山 |
39 | 高知 |
代替構文(だいたいこうぶん)
<?php
echo '<ul>';
echo '<li>水</li>';
echo '<li>お茶</li>';
echo '<li>コーラ</li>';
echo '</ul>';
echo '<ul>';
echo '<li>クッキー</li>';
echo '<li>チョコ</li>';
echo '<li>マシュマロ</li>';
echo '</ul>';
}
?>
↓こういう書き方思いつく
<ul>
<li>水</li>
<li>お茶</li>
<li>コーラ</li>
</ul>
<ul>
<li>クッキー</li>
<li>チョコ</li>
<li>マシュマロ</li>
</ul>
↓代替構文利用
<ul>
<li>水</li>
<li>お茶</li>
<li>コーラ</li>
</ul>
<ul>
<li>クッキー</li>
<li>チョコ</li>
<li>マシュマロ</li>
</ul>
●さっきの四国問題で代替構文すると
<?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>
<?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;?>