PHPの繰り返し処理とは、同じ処理を何度も実行するための仕組みです。
たとえば、次のような場面で使います。
- 1から10までの数字を順番に表示する
- 配列の中身を1つずつ取り出して表示する
- 商品一覧や記事一覧をHTMLに出力する
- フォームの入力項目を順番にチェックする
- WordPressで投稿一覧を表示する
同じコードを何度も書くと、コードが長くなり、修正もしづらくなります。
繰り返し処理を使えば、少ないコードで効率よく処理を書けます。
たとえば、「こんにちは」を5回表示したい場合、繰り返し処理を使わなければ次のように書く必要があります。
echo "こんにちは<br>";
echo "こんにちは<br>";
echo "こんにちは<br>";
echo "こんにちは<br>";
echo "こんにちは<br>";
これを for 文で書くと、次のように短くできます。
for ($i = 1; $i <= 5; $i++) {
echo "こんにちは<br>";
}
このように、繰り返し処理を使うことで、同じ処理をまとめて管理できるようになります。
PHPで使う主な繰り返し処理
PHPでよく使う繰り返し処理には、主に次の4種類があります。
| 種類 | 主な用途 |
|---|---|
for | 回数を指定して繰り返す |
while | 条件が true の間、繰り返す |
do while | 最低1回は処理を実行してから、条件に応じて繰り返す |
foreach | 配列や反復可能なデータを1つずつ処理する |
それぞれ特徴が異なるため、処理の目的に合わせて使い分けることが大切です。
特にPHPでは、配列を扱う機会が多いため、実務では foreach の使用頻度が高くなります。
一方、WordPressの投稿一覧では while を使ったループもよく登場します。
for文
for文とは
for 文は、繰り返す回数が決まっている場合や、カウンタを使って処理を制御したい場合に使います。
たとえば、1から5までの数字を順番に表示する場合は、次のように書きます。
for ($i = 1; $i <= 5; $i++) {
echo $i . "<br>";
}
出力結果は次のとおりです。
1
2
3
4
5
for文の基本構文
for 文の基本構文は次のとおりです。
for (初期化; 条件式; 増減式) {
繰り返したい処理;
}
それぞれの意味は次のようになります。
| 部分 | 意味 |
|---|---|
| 初期化 | 繰り返しを始める前に、最初の値を設定する |
| 条件式 | この条件が true の間だけ処理を繰り返す |
| 増減式 | 1回処理するたびに値を増やしたり減らしたりする |
先ほどのコードを分解すると、次のようになります。
for ($i = 1; $i <= 5; $i++) {
echo $i . "<br>";
}
| コード | 意味 |
|---|---|
$i = 1 | $i の初期値を1にする |
$i <= 5 | $i が5以下の間だけ繰り返す |
$i++ | 1回処理するたびに $i を1増やす |
echo $i | $i の値を表示する |
for文の処理の流れ
for 文は、次の流れで処理されます。
$i = 1 にする
↓
$i <= 5 か確認する
↓
true なら処理を実行する
↓
$i++ で $i を1増やす
↓
再び $i <= 5 か確認する
実際の流れは次のようになります。
$i = 1 → 表示 → $i = 2
$i = 2 → 表示 → $i = 3
$i = 3 → 表示 → $i = 4
$i = 4 → 表示 → $i = 5
$i = 5 → 表示 → $i = 6
$i = 6 → 条件に合わないため終了
for文でHTMLを出力する例
PHPはHTMLと組み合わせて使うことが多いため、for 文を使ってHTMLを出力する場面もあります。
<ul>
<?php for ($i = 1; $i <= 5; $i++) : ?>
<li>項目<?php echo $i; ?></li>
<?php endfor; ?>
</ul>
出力されるHTMLは次のようになります。
<ul>
<li>項目1</li>
<li>項目2</li>
<li>項目3</li>
<li>項目4</li>
<li>項目5</li>
</ul>
PHPでは、HTMLの中に制御構文を書く場合、次のようなコロン構文もよく使われます。
<?php for (...) : ?>
HTML
<?php endfor; ?>
WordPressのテーマ制作でも、このような書き方を見かけることがあります。
while文
while文とは
while 文は、条件が true の間だけ処理を繰り返す構文です。
繰り返す回数が明確に決まっているというよりも、条件を満たしている間だけ処理したい場合に向いています。
基本的な例は次のとおりです。
$i = 1;
while ($i <= 5) {
echo $i . "<br>";
$i++;
}
出力結果は次のようになります。
1
2
3
4
5
while文の基本構文
while 文の基本構文は次のとおりです。
while (条件式) {
繰り返したい処理;
}
条件式が true の間、ブロック内の処理が繰り返されます。
条件式が false になると、繰り返し処理は終了します。
$i = 1;
while ($i <= 5) {
echo $i . "<br>";
$i++;
}
このコードでは、$i が5以下の間だけ処理が実行されます。
処理のたびに $i++ で値が1ずつ増え、最終的に $i が6になると条件を満たさなくなるため、ループが終了します。
while文を使う場面
while 文は、次のような場面で使われます。
| 使用場面 | 例 |
|---|---|
| 条件を満たす間だけ処理したい | $count < 10 の間だけ処理する |
| データがある限り処理したい | データベースの結果を1件ずつ取得する |
| フラグが true の間だけ処理したい | $is_running === true の間だけ処理する |
| WordPressの投稿一覧を表示したい | have_posts() が true の間、投稿を表示する |
while文で注意すべき無限ループ
while 文では、条件がずっと true のままだと処理が終わりません。
これを 無限ループ といいます。
たとえば、次のコードは危険です。
$i = 1;
while ($i <= 5) {
echo $i . "<br>";
}
このコードでは、$i++ が書かれていないため、$i はずっと1のままです。
そのため、$i <= 5 が常に true になり、処理が終わらなくなります。
正しくは、次のように条件が変化する処理を書きます。
$i = 1;
while ($i <= 5) {
echo $i . "<br>";
$i++;
}
while 文を使うときは、いつ条件が false になるのかを意識することが重要です。
do while文
do while文とは
do while 文は、while 文と似ていますが、条件判定のタイミングが異なります。
while 文は、最初に条件を確認してから処理を実行します。
一方、do while 文は、先に処理を実行してから条件を確認します。
そのため、do while 文は 条件に関係なく最低1回は処理が実行される という特徴があります。
do while文の基本構文
do while 文の基本構文は次のとおりです。
do {
繰り返したい処理;
} while (条件式);
具体例です。
$i = 1;
do {
echo $i . "<br>";
$i++;
} while ($i <= 5);
出力結果は次のとおりです。
1
2
3
4
5
while文との違い
while 文と do while 文の違いは、条件を確認するタイミングです。
while 文は、先に条件を確認します。
while (条件式) {
処理;
}
do while 文は、先に処理を実行します。
do {
処理;
} while (条件式);
この違いにより、最初から条件が false の場合の動きが変わります。
条件がfalseの場合の違い
まず、while 文の例です。
$i = 10;
while ($i <= 5) {
echo $i . "<br>";
$i++;
}
この場合、最初から $i <= 5 が false なので、処理は一度も実行されません。
一方、do while 文では次のようになります。
$i = 10;
do {
echo $i . "<br>";
$i++;
} while ($i <= 5);
この場合、条件は false ですが、先に処理が1回実行されます。
出力結果は次のとおりです。
10
do while文を使う場面
do while 文は、一般的なWeb制作では for や foreach に比べると使用頻度は低めです。
ただし、次のように「最低1回は処理を実行したい」場合には便利です。
| 使用場面 | 例 |
|---|---|
| 最低1回は処理を実行したい | 初回表示や初回チェック |
| 条件判定より先に処理が必要 | まず処理してから継続するか判断する |
| 入力チェックを繰り返したい | 入力後に条件を確認する |
初心者の段階では、まず for、while、foreach を優先して理解し、余裕が出てきたら do while を覚えるとよいでしょう。
foreach文
foreach文とは
foreach 文は、配列や反復可能なオブジェクトの中身を1つずつ取り出して処理するための構文です。
PHPでは配列を扱う場面が多いため、foreach は非常によく使われます。
たとえば、配列に入っている果物の名前を順番に表示する場合は、次のように書きます。
$fruits = ["りんご", "みかん", "バナナ"];
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
出力結果は次のとおりです。
りんご
みかん
バナナ
この例では、$fruits の中身が1つずつ $fruit に入ります。
1回目は "りんご"、2回目は "みかん"、3回目は "バナナ" が $fruit に入ります。
foreach文の基本構文
foreach 文の基本構文は次のとおりです。
foreach ($配列 as $値) {
繰り返したい処理;
}
たとえば、次の配列があるとします。
$names = ["佐藤", "鈴木", "高橋"];
この配列を順番に表示するには、次のように書きます。
foreach ($names as $name) {
echo $name . "<br>";
}
出力結果は次のようになります。
佐藤
鈴木
高橋
キーと値を取得するforeach文
配列には、「キー」と「値」があります。
たとえば、次のような連想配列があるとします。
$user = [
"name" => "田中",
"age" => 28,
"job" => "デザイナー"
];
この場合、name、age、job がキーで、田中、28、デザイナー が値です。
foreach 文では、キーと値を両方取得できます。
foreach ($user as $key => $value) {
echo $key . ":" . $value . "<br>";
}
出力結果は次のとおりです。
name:田中
age:28
job:デザイナー
キーと値を使う構文は、次の形です。
foreach ($配列 as $キー => $値) {
処理;
}
連想配列を扱うときによく使うので、覚えておくと便利です。
foreach文でHTMLを出力する例
foreach 文は、HTMLの一覧表示と非常に相性がよいです。
たとえば、ナビゲーションメニューを配列から作る場合は、次のように書けます。
$items = ["トップページ", "サービス", "会社概要", "お問い合わせ"];
<ul>
<?php foreach ($items as $item) : ?>
<li><?php echo htmlspecialchars($item, ENT_QUOTES, "UTF-8"); ?></li>
<?php endforeach; ?>
</ul>
出力されるHTMLは次のようになります。
<ul>
<li>トップページ</li>
<li>サービス</li>
<li>会社概要</li>
<li>お問い合わせ</li>
</ul>
HTMLに値を出力する場合は、htmlspecialchars() を使ってエスケープするのが基本です。
これは、意図しないHTMLやJavaScriptが実行されるのを防ぐためです。
for文とforeach文の使い分け
for文が向いている場面
for 文は、カウンタを使って繰り返しを制御したい場合に向いています。
たとえば、次のような処理です。
for ($i = 1; $i <= 10; $i++) {
echo $i . "<br>";
}
このように、1から10までの数字を順番に扱う場合は、for 文がわかりやすいです。
for 文が向いている場面をまとめると、次のようになります。
| 場面 | 例 |
|---|---|
| 回数を指定したい | 10回だけ処理する |
| 数字を順番に扱いたい | 1から100まで表示する |
| インデックス番号を使いたい | 配列の0番目、1番目を指定して処理する |
| 増減のルールを細かく指定したい | 2ずつ増やす、逆順に処理する |
たとえば、2ずつ増やしたい場合は、次のように書けます。
for ($i = 0; $i <= 10; $i += 2) {
echo $i . "<br>";
}
出力結果は次のとおりです。
0
2
4
6
8
10
foreach文が向いている場面
foreach 文は、配列の中身を順番に処理したい場合に向いています。
$products = ["Tシャツ", "パーカー", "スニーカー"];
foreach ($products as $product) {
echo $product . "<br>";
}
foreach 文が向いている場面は、次のとおりです。
| 場面 | 例 |
|---|---|
| 配列の中身を順番に処理したい | 商品一覧を表示する |
| 連想配列を処理したい | ユーザー情報を表示する |
| キーと値を使いたい | name や price を扱う |
| HTMLの一覧を作りたい | <li> や <tr> を繰り返し出力する |
PHPでは、配列を処理する場合、for よりも foreach のほうが読みやすくなることが多いです。
たとえば、配列を表示する場合、for 文でも書けます。
$items = ["A", "B", "C"];
for ($i = 0; $i < count($items); $i++) {
echo $items[$i] . "<br>";
}
ただし、単純に配列の中身を順番に処理するだけなら、foreach のほうが自然です。
$items = ["A", "B", "C"];
foreach ($items as $item) {
echo $item . "<br>";
}
読みやすく、ミスも少なくなります。
break文
break文とは
break は、繰り返し処理を途中で終了するための文です。
たとえば、1から10まで繰り返す中で、5になったら処理を終了したい場合は、次のように書きます。
for ($i = 1; $i <= 10; $i++) {
if ($i === 5) {
break;
}
echo $i . "<br>";
}
出力結果は次のとおりです。
1
2
3
4
$i が5になった時点で break が実行され、ループ全体が終了します。
そのため、5以降の数字は表示されません。
break文を使う場面
break は、次のような場面で使います。
| 使用場面 | 例 |
|---|---|
| 条件に一致したら処理を終えたい | 目的のデータが見つかった |
| エラーが発生したら中断したい | 不正な値が含まれていた |
| これ以上処理する必要がない | 条件を満たす値を1つ見つけた |
| 無駄な処理を避けたい | 検索対象が見つかった時点で終了する |
たとえば、配列の中から10より大きい数字を見つけたら処理を終了する場合は、次のように書けます。
$numbers = [3, 6, 9, 12, 15];
foreach ($numbers as $number) {
if ($number > 10) {
echo "10より大きい数字が見つかりました";
break;
}
}
このコードでは、12 が見つかった時点で break が実行されます。
そのため、15 は処理されません。
ネストしたループでのbreak文
ループの中にさらにループがある状態を、ネストといいます。
通常の break は、一番内側のループだけを終了します。
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($j === 2) {
break;
}
echo "i: {$i}, j: {$j}<br>";
}
}
この場合、break で終了するのは内側の $j のループだけです。
外側の $i のループは続きます。
複数階層のループをまとめて抜けたい場合は、次のように数値を指定できます。
break 2;
例です。
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($j === 2) {
break 2;
}
echo "i: {$i}, j: {$j}<br>";
}
}
break 2 と書くと、内側のループだけでなく、外側のループも含めて終了できます。
continue文
continue文とは
continue は、現在の繰り返し処理だけをスキップして、次の繰り返しに進むための文です。
たとえば、1から5までの数字を表示する中で、3だけ表示したくない場合は、次のように書きます。
for ($i = 1; $i <= 5; $i++) {
if ($i === 3) {
continue;
}
echo $i . "<br>";
}
出力結果は次のとおりです。
1
2
4
5
$i が3のとき、continue によって echo の処理がスキップされます。
ただし、ループ自体は終了しないため、4と5は通常どおり処理されます。
continue文を使う場面
continue は、次のような場面で使います。
| 使用場面 | 例 |
|---|---|
| 特定の値だけスキップしたい | 空の値を飛ばす |
| 条件に合わないデータを除外したい | 無効なデータを処理しない |
| 一部の処理だけ実行しない | 特定カテゴリだけ表示しない |
| エラーのある項目だけ飛ばしたい | 次のデータへ進む |
たとえば、空文字をスキップして表示する場合は、次のように書けます。
$names = ["佐藤", "", "鈴木", "高橋"];
foreach ($names as $name) {
if ($name === "") {
continue;
}
echo $name . "<br>";
}
出力結果は次のとおりです。
佐藤
鈴木
高橋
空文字の部分だけスキップされ、その他の名前は表示されます。
break文とcontinue文の違い
break と continue は似ていますが、役割が異なります。
| 文 | 意味 |
|---|---|
break | ループ自体を終了する |
continue | 今回の処理だけスキップして、次の繰り返しに進む |
イメージとしては、次のようになります。
break → ここでループを完全に終わる
continue → 今回だけ飛ばして次へ進む
たとえば、次のコードでは break を使っています。
for ($i = 1; $i <= 5; $i++) {
if ($i === 3) {
break;
}
echo $i . "<br>";
}
出力結果は次のとおりです。
1
2
3になった時点でループ全体が終了します。
一方、continue の場合は次のようになります。
for ($i = 1; $i <= 5; $i++) {
if ($i === 3) {
continue;
}
echo $i . "<br>";
}
出力結果は次のとおりです。
1
2
4
5
3だけスキップされ、4と5の処理は続きます。
ネストした繰り返し処理
ネストとは
ネストとは、ある処理の中に、さらに同じような処理を入れることです。
繰り返し処理では、ループの中にさらにループを書くことがあります。
これを「ループのネスト」といいます。
たとえば、次のコードは for 文の中に、もう1つ for 文があります。
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
echo "i: {$i}, j: {$j}<br>";
}
}
出力結果は次のとおりです。
i: 1, j: 1
i: 1, j: 2
i: 1, j: 3
i: 2, j: 1
i: 2, j: 2
i: 2, j: 3
i: 3, j: 1
i: 3, j: 2
i: 3, j: 3
外側の $i が1回進むたびに、内側の $j のループが1から3まで実行されます。
ネストを使う場面
ネストした繰り返し処理は、次のような場面で使います。
| 使用場面 | 例 |
|---|---|
| 表を作る | 行と列を繰り返す |
| カレンダーを作る | 週と曜日を処理する |
| 2次元配列を扱う | ユーザー一覧や商品一覧を処理する |
| グループごとに一覧を表示する | カテゴリごとに商品を表示する |
ただし、ネストが深くなりすぎるとコードが読みにくくなります。
実務では、できるだけ処理を分けたり、関数化したりして、見通しをよくすることが大切です。
2次元配列をforeachで処理する例
2次元配列とは、配列の中にさらに配列が入っているデータです。
たとえば、次のようなユーザー一覧があります。
$users = [
[
"name" => "田中",
"age" => 28
],
[
"name" => "佐藤",
"age" => 35
],
[
"name" => "鈴木",
"age" => 22
]
];
このデータを表示する場合は、foreach を使うとわかりやすく書けます。
foreach ($users as $user) {
echo "名前:" . htmlspecialchars($user["name"], ENT_QUOTES, "UTF-8") . "<br>";
echo "年齢:" . htmlspecialchars($user["age"], ENT_QUOTES, "UTF-8") . "<br>";
echo "<hr>";
}
出力イメージは次のとおりです。
名前:田中
年齢:28
----
名前:佐藤
年齢:35
----
名前:鈴木
年齢:22
----
このように、複数のデータをまとめて扱う場合、foreach は非常に便利です。
実務でよく使う繰り返し処理の例
商品一覧を表示する
PHPでは、配列に商品情報を入れて、foreach でHTMLに出力することがよくあります。
$products = [
[
"name" => "Tシャツ",
"price" => 3000
],
[
"name" => "パーカー",
"price" => 5800
],
[
"name" => "スニーカー",
"price" => 9800
]
];
この商品一覧をHTMLとして表示する場合は、次のように書けます。
<div class="products">
<?php foreach ($products as $product) : ?>
<div class="product">
<h3><?php echo htmlspecialchars($product["name"], ENT_QUOTES, "UTF-8"); ?></h3>
<p><?php echo number_format($product["price"]); ?>円</p>
</div>
<?php endforeach; ?>
</div>
ここでは、商品名を htmlspecialchars() でエスケープしています。
外部データやユーザー入力をHTMLに表示する場合は、基本的にエスケープ処理を行いましょう。
また、価格には number_format() を使っています。
echo number_format($product["price"]);
これにより、9800 が 9,800 のようにカンマ区切りで表示されます。
セレクトボックスを作る
フォームのセレクトボックスも、配列と foreach を使うと簡単に作れます。
$categories = ["お知らせ", "ブログ", "事例紹介"];
<select name="category">
<?php foreach ($categories as $category) : ?>
<option value="<?php echo htmlspecialchars($category, ENT_QUOTES, "UTF-8"); ?>">
<?php echo htmlspecialchars($category, ENT_QUOTES, "UTF-8"); ?>
</option>
<?php endforeach; ?>
</select>
配列を使って選択肢を管理すると、項目を追加・削除するときに修正しやすくなります。
たとえば、カテゴリを増やしたい場合は、配列に値を追加するだけです。
$categories = ["お知らせ", "ブログ", "事例紹介", "イベント"];
HTML部分を何度も書き換える必要がないため、保守性が高くなります。
テーブルを作る
ユーザー一覧のような表形式のデータも、foreach で出力できます。
$users = [
["name" => "田中", "email" => "tanaka@example.com"],
["name" => "佐藤", "email" => "sato@example.com"],
["name" => "鈴木", "email" => "suzuki@example.com"]
];
<table>
<thead>
<tr>
<th>名前</th>
<th>メールアドレス</th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user) : ?>
<tr>
<td><?php echo htmlspecialchars($user["name"], ENT_QUOTES, "UTF-8"); ?></td>
<td><?php echo htmlspecialchars($user["email"], ENT_QUOTES, "UTF-8"); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
一覧ページ、管理画面、検索結果ページなどでは、このような繰り返し処理をよく使います。
WordPressで使う繰り返し処理
WordPressのループとは
WordPressでは、投稿一覧や記事本文を表示するときに「ループ」と呼ばれる仕組みを使います。
代表的なコードは次のとおりです。
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<article>
<h2><?php the_title(); ?></h2>
<div>
<?php the_content(); ?>
</div>
</article>
<?php endwhile; ?>
<?php endif; ?>
このコードでは、while 文を使って投稿データを1件ずつ表示しています。
WordPressループの意味
WordPressループで使われている主な関数の意味は、次のとおりです。
| コード | 意味 |
|---|---|
have_posts() | 表示できる投稿があるか確認する |
while (have_posts()) | 投稿がある間、処理を繰り返す |
the_post() | 次の投稿データをセットする |
the_title() | 投稿タイトルを表示する |
the_content() | 投稿本文を表示する |
have_posts() が true の間、while 文の中の処理が繰り返されます。
the_post() によって投稿データが1件ずつセットされ、the_title() や the_content() で内容を表示します。
WordPressではforeachもよく使う
WordPressでは while だけでなく、foreach もよく使います。
たとえば、取得したカテゴリ一覧を表示する場合です。
$categories = get_categories();
foreach ($categories as $category) {
echo htmlspecialchars($category->name, ENT_QUOTES, "UTF-8") . "<br>";
}
また、カスタムフィールド、メニュー、タグ一覧、独自に取得した投稿配列などを扱う場合にも foreach が使われます。
つまり、WordPressでは次のように覚えるとわかりやすいです。
| 場面 | よく使う構文 |
|---|---|
| メインループで投稿を表示する | while |
| 配列や取得済みデータを処理する | foreach |
繰り返し処理でよくあるミス
無限ループになる
while 文で特に注意したいのが、無限ループです。
次のコードは、処理が終わらなくなる可能性があります。
$i = 1;
while ($i <= 10) {
echo $i;
}
このコードでは、$i の値が変化しません。
そのため、$i <= 10 がずっと true のままになります。
正しくは、次のように $i++ を書きます。
$i = 1;
while ($i <= 10) {
echo $i;
$i++;
}
繰り返し処理では、条件がどこで変化するのかを必ず確認しましょう。
条件式を間違える
for 文では、条件式の書き方を間違えると、想定と違う回数だけ処理されます。
たとえば、次のコードを見てください。
for ($i = 1; $i < 5; $i++) {
echo $i . "<br>";
}
この場合、表示されるのは1から4までです。
1
2
3
4
5も表示したい場合は、次のように <= を使います。
for ($i = 1; $i <= 5; $i++) {
echo $i . "<br>";
}
< と <= の違いは、繰り返し処理では非常に重要です。
foreachで変数名がわかりにくい
foreach では、変数名をわかりやすくすることも大切です。
たとえば、次のコードは動きますが、少しわかりにくいです。
foreach ($users as $value) {
echo $value["name"];
}
$value という名前だけでは、何の値が入っているのかが伝わりにくくなります。
次のように書くと、意味がわかりやすくなります。
foreach ($users as $user) {
echo $user["name"];
}
配列名を複数形、取り出す値を単数形にすると読みやすくなります。
$users as $user
$products as $product
$posts as $post
$categories as $category
コードは自分だけでなく、他の人が読むこともあります。
変数名は、処理内容が伝わる名前にしましょう。
配列ではない値にforeachを使う
foreach は、配列や反復可能なデータに対して使う構文です。
そのため、配列ではない値に対して使うと、エラーや警告の原因になります。
$name = "田中";
foreach ($name as $value) {
echo $value;
}
このようなコードは避けましょう。
配列かどうかが不明な場合は、is_array() で確認してから処理すると安全です。
if (is_array($items)) {
foreach ($items as $item) {
echo htmlspecialchars($item, ENT_QUOTES, "UTF-8");
}
}
反復可能なデータ全般を確認したい場合は、is_iterable() を使うこともできます。
if (is_iterable($items)) {
foreach ($items as $item) {
echo htmlspecialchars($item, ENT_QUOTES, "UTF-8");
}
}
初心者のうちは、まず foreach は配列に使うもの、と理解しておくとよいでしょう。
HTML出力時にエスケープしない
HTMLに値を出力する場合、エスケープ処理をしないと危険なケースがあります。
たとえば、次のようにそのまま出力するのは注意が必要です。
echo $user["name"];
外部データやフォーム入力値を表示する場合は、次のように htmlspecialchars() を使います。
echo htmlspecialchars($user["name"], ENT_QUOTES, "UTF-8");
より丁寧に書くなら、次のように ENT_SUBSTITUTE を含めてもよいです。
echo htmlspecialchars($user["name"], ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
Webページに値を表示するときは、セキュリティ対策としてエスケープを意識しましょう。
繰り返し処理を学ぶ順番
最初にfor文を理解する
まずは for 文で、繰り返し処理の基本的な流れを理解しましょう。
for ($i = 1; $i <= 10; $i++) {
echo $i . "<br>";
}
初期値、条件式、増減式 の関係を理解すると、他の繰り返し処理も学びやすくなります。
次にforeach文を練習する
PHPでは配列を扱う機会が多いため、foreach は早めに慣れておきたい構文です。
$items = ["A", "B", "C"];
foreach ($items as $item) {
echo $item . "<br>";
}
特に、配列からHTMLを作る練習をしておくと、実務に近い感覚で学べます。
<ul>
<?php foreach ($items as $item) : ?>
<li><?php echo htmlspecialchars($item, ENT_QUOTES, "UTF-8"); ?></li>
<?php endforeach; ?>
</ul>
while文とdo while文を理解する
for と foreach に慣れたら、while 文を学びましょう。
$i = 1;
while ($i <= 5) {
echo $i . "<br>";
$i++;
}
while は、条件を基準に繰り返す処理です。
そのあとで、最低1回は処理を実行する do while を理解するとよいです。
$i = 1;
do {
echo $i . "<br>";
$i++;
} while ($i <= 5);
breakとcontinueを覚える
繰り返し処理に慣れてきたら、break と continue も覚えましょう。
break;
は、ループを終了します。
continue;
は、現在の処理だけをスキップして次へ進みます。
この2つを使えるようになると、条件に応じた柔軟なループ処理が書けるようになります。
PHPの繰り返し処理のまとめ
PHPの繰り返し処理は、同じ処理を効率よく実行するための基本構文です。
主に使う構文は、次の4つです。
| 構文 | 特徴 |
|---|---|
for | カウンタを使って、回数や順番を制御しやすい |
while | 条件が true の間だけ処理を繰り返す |
do while | 条件に関係なく、最低1回は処理を実行する |
foreach | 配列や反復可能なデータを1つずつ処理する |
初心者がまず重点的に覚えるべきなのは、for と foreach です。
for は、回数を指定した繰り返しに向いています。
foreach は、配列や一覧データの処理に向いています。
また、WordPressでは投稿一覧を表示する場面で while がよく使われます。
そのため、Web制作やWordPressを学ぶ場合は、foreach と while の理解も重要です。
繰り返し処理を書くときは、次の点に注意しましょう。
| 注意点 | 内容 |
|---|---|
| 無限ループを避ける | 条件がどこで変化するか確認する |
| 条件式を正しく書く | < と <= の違いに注意する |
| 変数名をわかりやすくする | $users as $user のように書く |
| HTML出力時はエスケープする | htmlspecialchars() を使う |
| 配列かどうか確認する | 必要に応じて is_array() や is_iterable() を使う |
PHPの繰り返し処理は、商品一覧、記事一覧、フォーム処理、WordPressの投稿表示など、実務で頻繁に使います。
まずは基本構文を理解し、配列を foreach で処理してHTMLに出力する練習をすると、実践的なPHPの書き方が身につきます。
以上、PHPの繰り返し処理についてでした。
最後までお読みいただき、ありがとうございました。










