フリーキーズ | 独学プログラミング

PHP制御構文ガイド!if, switch, for, foreachの使い方を初心者にもわかりやすく解説

リンドくん

リンドくん

たなべ先生、PHPを学んでいるんですけど、「制御構文」って何ですか?難しそうで...

たなべ

たなべ

制御構文はプログラムの実行の流れをコントロールするための仕組みなんだ。
例えば、条件によって処理を分けたり、同じ処理を繰り返したりするときに使うんだよ。実は身近な例で考えると分かりやすいんだ。

プログラミングを学び始めると必ず出会う「制御構文」。
これはプログラムの流れを制御する基本的な仕組みです。

制御構文の基本であるif、switch、for、foreachをマスターすれば、プログラムに明確な判断力と反復力を与えることができます。
この記事では、PHP初心者の方でも理解できるよう、実際のコード例を交えながら、制御構文の使い方を段階的に解説していきます。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

制御構文とは何か?プログラムの流れを制御する基本概念

リンドくん

リンドくん

そもそも「制御」って具体的に何をするんですか?

たなべ

たなべ

たとえば、朝起きたときを考えてみて。雨が降っていたら傘を持つ、晴れていたら持たないよね?
これと同じように、プログラムでも条件によって動作を変える必要があるんだ。

制御構文の役割

制御構文とは、プログラムの実行順序や条件分岐、繰り返し処理を決定する仕組みです。
通常、プログラムは上から下へ順番に実行されますが、制御構文を使うことで以下のようなことが可能になります。

  • 条件によって処理を分ける(条件分岐)
  • 同じ処理を繰り返し実行する(繰り返し処理)
  • 複数の選択肢から適切なものを選ぶ(多分岐処理)

なぜ制御構文が重要なのか

制御構文がなければ、プログラムは決められた順序でしか動作できません。
しかし実際のアプリケーションでは、ユーザーの入力や状況に応じて異なる処理を実行する必要があります。

例えば、以下のような処理を考えてみてください。

  • ユーザーの年齢によって表示するコンテンツを変える
  • 商品の在庫数に応じて購入ボタンの表示を切り替える
  • 複数の商品データを順番に処理する

これらはすべて制御構文によって実現されているのです。

if文 - 条件によって処理を分ける基本構文

if文の基本構造

if文は最も基本的な条件分岐の構文です。
「もし〜なら」という日本語の表現と同じ考え方で使用できます。

<?php
$age = 20;

if ($age >= 18) {
    echo "成人です";
}
?>

この例では、変数$ageの値が18以上の場合に「成人です」というメッセージを表示します。

if-else文で選択肢を増やす

else文を組み合わせることで、条件を満たさない場合の処理も指定できます。

<?php
$score = 75;

if ($score >= 80) {
    echo "優秀です!";
} else {
    echo "もう少し頑張りましょう";
}
?>

elseif文で複数条件を処理する

elseif文を使用することで、より複雑な条件分岐を作成できます。

<?php
$temperature = 25;

if ($temperature >= 30) {
    echo "暑いです";
} elseif ($temperature >= 20) {
    echo "過ごしやすい気温です";
} elseif ($temperature >= 10) {
    echo "少し涼しいです";
} else {
    echo "寒いです";
}
?>

この例では、気温に応じて4つの異なるメッセージを表示します。上から順番に条件がチェックされ、最初に真となった条件の処理が実行される点がポイントです。

このように、if文を入れ子(ネスト)にすることで、より複雑な条件処理を実現できます。

switch文 - 多分岐処理をスッキリと記述する

リンドくん

リンドくん

if文だけでも十分な気がするんですけど、switch文って何が違うんですか?

たなべ

たなべ

いい質問だね!同じ変数の値によって分岐する場合は、switch文の方がコードがスッキリして読みやすくなるんだ。
特に選択肢がたくさんある場合は威力を発揮するよ。

switch文の基本構造

switch文は、一つの変数の値に応じて処理を分ける際に便利な構文です。複数のif-elseif文を使うよりも、コードが読みやすくなります。

<?php
$day_of_week = 'Monday';

switch ($day_of_week) {
    case 'Monday':
        echo "月曜日は憂鬱ですね";
        break;
    case 'Friday':
        echo "金曜日は嬉しいですね";
        break;
    case 'Saturday':
    case 'Sunday':
        echo "週末は休日です";
        break;
    default:
        echo "平日です";
        break;
}
?>

break文の重要性

break文は、該当するcaseの処理が終わったときにswitch文から抜け出すために必要です。
break文を忘れると、次のcaseの処理も実行されてしまいます(フォールスルーと言います)。

<?php
$grade = 'B';

// break文がない場合の例(意図しない動作)
switch ($grade) {
    case 'A':
        echo "優秀";
        // breakがないため、次のcaseも実行される
    case 'B':
        echo "良好";
        // breakがないため、次のcaseも実行される
    case 'C':
        echo "普通";
        break;
}
// 結果:「良好普通」と表示される
?>

このように、ユーザーからの入力に応じて異なる処理を実行する場合にswitch文は非常に有効です。

for文 - 決まった回数の繰り返し処理

for文の基本構造

for文は、指定した回数だけ処理を繰り返すときに使用する構文です。
カウンタ変数(以下の例では$i)を使って、開始値から終了値まで処理を反復します。

<?php
// 1から5まで数字を表示
for ($i = 1; $i <= 5; $i++) {
    echo "カウント: " . $i . "<br>";
}
?>

for文の構成要素

for文は3つの部分から構成されています。

  1. 初期化式 = ループ開始前に実行される($i = 1
  2. 条件式 = ループを続けるかどうかの判定($i <= 5
  3. 更新式 = 各ループの最後に実行される($i++

for文の例

<?php
// 九九の表を作成
echo "<table border='1'>";
for ($i = 1; $i <= 9; $i++) {
    echo "<tr>";
    for ($j = 1; $j <= 9; $j++) {
        $result = $i * $j;
        echo "<td>{$i} × {$j} = {$result}</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>

この例では、入れ子のfor文を使用して九九の表を作成しています。
外側のループが行を、内側のループが列を制御しています。

配列の要素を順番に処理する

<?php
$fruits = ['りんご', 'バナナ', 'オレンジ', 'ぶどう'];

for ($i = 0; $i < count($fruits); $i++) {
    echo ($i + 1) . "番目: " . $fruits[$i] . "<br>";
}
?>

配列の添字を使ってfor文で要素にアクセスすることも可能ですが、後述するforeach文の方が適している場合が多いです。

foreach文 - 配列やオブジェクトを効率的に処理する

リンドくん

リンドくん

先生、配列を処理するときはfor文とforeach文のどちらを使えばいいんですか?

たなべ

たなべ

配列の全ての要素を順番に処理したい場合はforeach文を使うのがおすすめだよ。
コードがシンプルになるし、連想配列でも簡単に使えるからね。

foreach文の基本構造

foreach文は、配列やオブジェクトの全ての要素を自動的に順番に処理する構文です。
for文と比較して、より直感的で安全にコードを書くことができます。

<?php
$colors = ['赤', '青', '緑', '黄色'];

foreach ($colors as $color) {
    echo "色: " . $color . "<br>";
}
?>

連想配列でのforeach文

連想配列(キーと値のペア)を処理する場合は、キーと値の両方を取得できます。

<?php
$student_scores = [
    '田中' => 85,
    '佐藤' => 92,
    '鈴木' => 78,
    '高橋' => 88
];

foreach ($student_scores as $name => $score) {
    echo "生徒名: {$name}、点数: {$score}点<br>";
}
?>

多次元配列の処理

配列の中に配列が含まれている多次元配列も、foreach文で効率的に処理できます。

<?php
$products = [
    ['name' => 'ノートPC', 'price' => 80000, 'category' => '電子機器'],
    ['name' => 'マウス', 'price' => 2000, 'category' => '電子機器'],
    ['name' => '本', 'price' => 1500, 'category' => '書籍']
];

foreach ($products as $product) {
    echo "商品名: {$product['name']}, ";
    echo "価格: {$product['price']}円, ";
    echo "カテゴリ: {$product['category']}<br>";
}
?>

foreach文での参照渡し

配列の要素を直接変更したい場合は、参照渡し(&演算子)を使用します。

<?php
$numbers = [1, 2, 3, 4, 5];

// 各要素を2倍にする
foreach ($numbers as &$number) {
    $number = $number * 2;
}

// 結果を表示
foreach ($numbers as $number) {
    echo $number . " ";  // 結果: 2 4 6 8 10
}
?>

注意点として、参照渡しを使用した後は、変数の参照を解除しないとバグの温床になります。

unset($number); // 参照を解除

まとめ

リンドくん

リンドくん

制御構文って思った以上に奥が深いんですね!特にforeach文は使いやすそうです。

たなべ

たなべ

そうなんだ!制御構文をマスターすると、プログラムの表現力が格段に向上するよ。
最初は基本的な使い方から始めて、徐々に複雑な処理にチャレンジしてみてね。

この記事では、PHPの主要な制御構文について詳しく解説してきました。
制御構文は、プログラムに判断力と反復力を与える重要な仕組みです。

重要なポイントをまとめていきましょう。

  • if文は条件分岐の基本で、elseif文と組み合わせることで複雑な条件処理が可能
  • switch文は同じ変数の値による多分岐処理を読みやすく記述できる
  • for文は決まった回数の繰り返し処理に適している
  • foreach文は配列やオブジェクトの全要素を効率的に処理できる

これらの制御構文を適切に使い分けることで、より実用的で保守性の高いプログラムを作成することができます。

ぜひ今回学んだ内容を実際のコードで試してみてください。
小さなプログラムから始めて、徐々に複雑な処理にチャレンジしていくことで、プログラミングスキルが着実に向上するでしょう。

この記事をシェア

関連するコンテンツ