for文で繰り返し
配列の個数と範囲指定
配列をfor文 で繰り返します。西暦の配列データをビルトイン関数 count()、range() を使って処理してみましょう。
$years = [2020, 2019, 2018, 2017];
count()
count() は配列に入っているデータ個数を取得します。
count(配列);
$years のデータ個数を count() で取得をします。
count($years); //4
range()
$years = [2020, 2019, 2018, 2017];
この配列は range() を使った範囲指定で作成できます。結果を確認したら、var_dump() の行はコメントアウトしてください。
$years = range(2020, 2017);
var_dump($years);
for文でHTML表示
$yearsをfor文で繰り返してHTML表示してみましょう。配列の個数をインデックス(キー)の最大数としてループします。
<?php
$years = range(2020, 2017);
?>
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
<h2>年</h2>
<?php
for ($i = 0; $i < count($years); $i++) {
echo $years[$i];
echo "年<br>";
}
?>
</body>
</html>
foreach 文
for 文による配列のループ処理は、count() を使うなどあまり効率的な処理ではありません。 そこで PHP では foreach 文で配列をループさせることもできます。
foreach (配列 as 一時変数) {
処理;
}
配列データの中身を表示
foreach で年を順番に表示してみましょう。
foreach ($years as $year) {
echo "{$year}年";
echo "<br>";
}
endforeach 文
forやforeachでHTMLタグを echo 出力しましたが、処理が複雑になるとわかりづらくなります。そこでPHPでは endfor や endforeach の構文を使うとループ部分のHTMLを直接記述することができます。
endfor の場合
for ではじまり :(コロン) で区切ります。HTMLを記述したら endfor で終わります。
<?php for (繰り返し設定): ?>
HTML
<?php endfor ?>
endforeach の場合
foreach ではじまり :(コロン) で区切ります。HTMLを記述したら endforeach で終わります。
<?php foreach (繰り返し設定): ?>
HTML
<?php endforeach ?>
endforeach でHTML出力
$drinksのデータを endforeachでループし、li タグを出力した例です。
<?php
$years = range(2020, 2017);
$drinks = ['コーヒー', '紅茶', 'ほうじ茶'];
?>
...
<h2>ドリンクメニュー</h2>
<ul>
<?php foreach ($drinks as $drink) : ?>
<li><?= $drink ?></li>
<?php endforeach ?>
</ul>
結果
ドリンクメニュー
・コーヒー
・紅茶
・ほうじ茶
連想配列をループ処理する
foreach文では連想配列のキーと値を同時に処理できます。
foreach (連想配列 as キー => 値) {
処理;
}
連想配列のキーと値を表示
連想配列 $user のデータを作成して、foreachでキーと値をHTML表示してみましょう。
<?php
$user = [
'name' => '東京 一郎',
'gender' => 'male',
'age' => 21,
];
?>
...
<h2>ユーザデータ</h2>
<dl>
<?php foreach ($user as $key => $value) : ?>
<dt><?= $key ?></dt>
<dd><?= $value ?></dd>
<?php endforeach ?>
</dl>
...
結果
- name
- 東京 一郎
- gender
- male
- age
- 21
プルダウン表示
HTMLのプルダウンはselectとoptionで作成できます。
<select name="year">
<option value="2020">2020年</option>
<option value="2019">2019年</option>
<option value="2018">2018年</option>
<option value="2017">2017年</option>
</select>
endforeach でプルダウン表示
今年から1900年のプルダウンを作成してみましょう。date('Y') で今年を取得して1900までの配列を range() で作成します。
<?php
...
$years = range(date('Y'), 1900);
...
?>
...
<h2>プルダウン</h2>
<select name="year">
<?php foreach ($years as $year) : ?>
<option value="<?= $year ?>"><?= $year ?>年</option>
<?php endforeach ?>
</select>
...
ファイルを検索する glob() 関数
glob() を使うと、指定したフォルダのファイルを検索することができます。例えば現在のフォルダ(実行するPHPファイル)にのすべてのファイルを検索するには ./* を指定します。 ここでも *(アスタリスク)は全てを意味します。
foreach (glob("./*") as $file) {
$all_files[] = $file;
}
現在のフォルダの .php ファイルだけを検索したいときは ./*.php と指定します。
foreach (glob("./*.php") as $file) {
$php_files[] = $file;
}
HTML部分
...
<h2>ファイルリスト</h2>
<ul>
<?php foreach ($all_files as $file) : ?>
<li><?= $file ?></li>
<?php endforeach ?>
</ul>
<h2>ファイルリスト(PHP)</h2>
<ul>
<?php foreach ($php_files as $file) : ?>
<li><?= $file ?></li>
<?php endforeach ?>
</ul>
...
問題1
以下の商品の配列データを作成し HTML で表示してみましょう。また、is_sale = true のときは「セール」と表示してみましょう。
id | name | price | is_sale |
---|---|---|---|
1 | コーヒー | 120 | true |
2 | 紅茶 | 150 | false |
3 | ほうじ茶 | 130 | true |
4 | 炭酸水 | 80 | true |
5 | オレンジジュース | 150 | false |
例
問題2
問題1の商品データを以下の個数で買った時の 合計金額を計算してみましょう。
ID | 個数 |
---|---|
1 | 8 |
2 | 3 |
3 | 6 |
4 | 0 |
5 | 7 |