PHPの繰り返し処理について

採用はこちら

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 <= 5false なので、処理は一度も実行されません。

一方、do while 文では次のようになります。

$i = 10;

do {
    echo $i . "<br>";
    $i++;
} while ($i <= 5);

この場合、条件は false ですが、先に処理が1回実行されます。

出力結果は次のとおりです。

10

do while文を使う場面

do while 文は、一般的なWeb制作では forforeach に比べると使用頻度は低めです。

ただし、次のように「最低1回は処理を実行したい」場合には便利です。

使用場面
最低1回は処理を実行したい初回表示や初回チェック
条件判定より先に処理が必要まず処理してから継続するか判断する
入力チェックを繰り返したい入力後に条件を確認する

初心者の段階では、まず forwhileforeach を優先して理解し、余裕が出てきたら 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" => "デザイナー"
];

この場合、nameagejob がキーで、田中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 文が向いている場面は、次のとおりです。

場面
配列の中身を順番に処理したい商品一覧を表示する
連想配列を処理したいユーザー情報を表示する
キーと値を使いたいnameprice を扱う
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文の違い

breakcontinue は似ていますが、役割が異なります。

意味
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"]);

これにより、98009,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文を理解する

forforeach に慣れたら、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を覚える

繰り返し処理に慣れてきたら、breakcontinue も覚えましょう。

break;

は、ループを終了します。

continue;

は、現在の処理だけをスキップして次へ進みます。

この2つを使えるようになると、条件に応じた柔軟なループ処理が書けるようになります。

PHPの繰り返し処理のまとめ

PHPの繰り返し処理は、同じ処理を効率よく実行するための基本構文です。

主に使う構文は、次の4つです。

構文特徴
forカウンタを使って、回数や順番を制御しやすい
while条件が true の間だけ処理を繰り返す
do while条件に関係なく、最低1回は処理を実行する
foreach配列や反復可能なデータを1つずつ処理する

初心者がまず重点的に覚えるべきなのは、forforeach です。

for は、回数を指定した繰り返しに向いています。

foreach は、配列や一覧データの処理に向いています。

また、WordPressでは投稿一覧を表示する場面で while がよく使われます。

そのため、Web制作やWordPressを学ぶ場合は、foreachwhile の理解も重要です。

繰り返し処理を書くときは、次の点に注意しましょう。

注意点内容
無限ループを避ける条件がどこで変化するか確認する
条件式を正しく書く<<= の違いに注意する
変数名をわかりやすくする$users as $user のように書く
HTML出力時はエスケープするhtmlspecialchars() を使う
配列かどうか確認する必要に応じて is_array()is_iterable() を使う

PHPの繰り返し処理は、商品一覧、記事一覧、フォーム処理、WordPressの投稿表示など、実務で頻繁に使います。

まずは基本構文を理解し、配列を foreach で処理してHTMLに出力する練習をすると、実践的なPHPの書き方が身につきます。

以上、PHPの繰り返し処理についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次