PHPのif文の使い方を完全ガイド!初心者でもわかる乱数生成
生徒
「CodeIgniterのビューの中で、条件によって表示を変えたり、データを繰り返し表示したりする方法を教えてください!」
先生
「PHPでは、if文を使って、簡単に条件分岐することができます。CodeIgniterのビューでも、通常のPHPと同じように書けますが、HTMLと混ぜて書くときは『代替構文』という書き方を使うと、初心者の方でもコードが読みやすくなりますよ。」
生徒
「代替構文ですか?具体的にはどのように使うんですか?」
先生
「それでは、基本的な使い方を見ていきましょう!」
1. if文とは?
PHPのif文は、プログラム内で条件に応じて処理を分岐させるためのものです。例えば、ある条件が「真(true)」であれば特定の処理を実行し、そうでなければスキップする、といった操作が可能になります。分岐処理を理解することで、プログラムの流れを制御できるようになり、より複雑なアプリケーションを作ることができるようになります。
CodeIgniter(コードイグナイター)というPHPのフレームワークにおいて、画面の見た目を作る「ビュー(View)」ファイルの中でも、このif文は非常によく使われます。例えば、「ログインしている人にはログアウトボタンを表示し、ログインしていない人にはログインボタンを表示する」といった切り替えが、このif文一つで実現できるのです。
2. ビューで見やすい「代替構文」の基本
プログラミングを始めたばかりの方が、HTMLの中にPHPのコードを書こうとすると、波括弧({ })がどこで始まり、どこで終わっているのか分からなくなることがよくあります。そこでCodeIgniterや一般的なPHPの開発では、ビューファイルの中で「代替構文」という書き方を推奨しています。
代替構文では、波括弧の代わりに「コロン(:)」と「endif;」を使います。これにより、HTMLの構造が崩れにくく、後から見返したときに「ここでif文が終わっているんだな」ということが一目で分かるようになります。これは、まるで文章の最後に句読点を打つのと同じくらい、整理整頓に役立つルールです。
3. 【実践】if文を使った条件分岐のサンプルコード
それでは、実際にCodeIgniterのビューファイルで、条件によってメッセージを変えるコードを書いてみましょう。今回は「ラッキーカラー」を表示する簡単な例を作成します。変数の中身が特定の色だった場合に、お祝いのメッセージを表示する仕組みです。
<?php $lucky_color = 'red'; ?>
<div>
<p>今日のあなたのラッキーカラーは「<?php echo $lucky_color; ?>」です!</p>
<?php if ($lucky_color === 'red'): ?>
<p class="text-danger">情熱的な赤色ですね!今日は情熱を持って行動すると吉です。</p>
<?php elseif ($lucky_color === 'blue'): ?>
<p class="text-primary">落ち着いた青色ですね!今日は冷静な判断ができそうです。</p>
<?php else: ?>
<p>素敵な一日を過ごしてくださいね!</p>
<?php endif; ?>
</div>
実行結果は以下のようになります。$lucky_colorが'red'なので、最初のメッセージが表示されます。
今日のあなたのラッキーカラーは「red」です!
情熱的な赤色ですね!今日は情熱を持って行動すると吉です。
4. 乱数生成を使っておみくじを作ってみよう
「乱数(らんすう)」とは、サイコロを振ったときのように、コンピュータがデタラメに選んだ数字のことです。PHPではrand()という便利な命令(関数)を使って、簡単に乱数を作ることができます。これを使って、アクセスするたびに結果が変わるおみくじを作ってみましょう。
プログラミングにおいて、ランダムな動きを取り入れることは、ユーザーに楽しさを提供する素晴らしい方法です。1から3までの数字をランダムに発生させ、1なら大吉、2なら中吉、3なら小吉と表示させる処理を作ります。これで、ページを更新するたびに運勢が変わる動的な仕組みが完成します。
<?php
// 1から3までの数字をランダムに作成します
$omikuji = rand(1, 3);
?>
<div class="card shadow-sm p-4">
<h3>今日のおみくじ結果</h3>
<?php if ($omikuji === 1): ?>
<p class="fw-bold text-warning">【大吉】 最高の運勢です!何をやってもうまくいきます。</p>
<?php elseif ($omikuji === 2): ?>
<p class="fw-bold text-success">【中吉】 良い一日になりそうです。笑顔を忘れずに。</p>
<?php else: ?>
<p class="fw-bold text-secondary">【小吉】 平穏な一日です。コツコツ頑張りましょう。</p>
<?php endif; ?>
</div>
5. データの繰り返し処理「foreach文」とは?
Webサイトでは、お知らせ一覧や商品リストなど、同じような形式のデータを並べて表示することがたくさんあります。このとき、一つずつ手作業でHTMLを書くのはとても大変ですし、データの数が変わると対応できません。そこで使われるのが「繰り返し処理(ループ)」です。
PHPで最もよく使われる繰り返し処理がforeach文です。これは、データの集まり(配列)から、中身を一つずつ取り出して処理を行う命令です。CodeIgniterでは、コントローラーから渡されたデータベースの情報を、このforeach文を使ってビューに表示するのが一般的な流れになります。
6. 【実践】foreach文でリストを表示する方法
簡単な「買い物リスト」を表示するコードを書いてみましょう。配列という箱の中に複数の商品名を入れておき、それを順番に取り出して箇条書きのリスト(ulタグとliタグ)として表示します。ここでも「代替構文」である「endforeach;」を使うのがポイントです。
<?php
// 買い物リストのデータ(配列)を用意します
$shopping_list = ['リンゴ', 'バナナ', '牛乳', '卵'];
?>
<div class="mt-4">
<h2>買い物メモ</h2>
<ul class="list-group">
<?php foreach ($shopping_list as $item): ?>
<li class="list-group-item">
<i class="bi bi-check2-circle"></i> <?php echo $item; ?>
</li>
<?php endforeach; ?>
</ul>
</div>
このコードを実行すると、配列に入っている「リンゴ」「バナナ」といった言葉が、自動的に一つずつリストの項目として出力されます。データが増えても、プログラムが自動で繰り返してくれるので、非常に効率的です。
買い物メモ
・リンゴ
・バナナ
・牛乳
・卵
7. 条件分岐と繰り返しを組み合わせるテクニック
if文とforeach文を組み合わせることで、さらに高度な表示が可能になります。例えば、「商品の在庫があるものだけを表示する」や「特定の条件に当てはまる項目だけ色を変える」といった処理です。これは実際のWebサイト制作でも、非常に多く使われる必須のテクニックと言えるでしょう。
例として、テストの点数一覧を表示し、赤点(40点未満)の人だけを目立たせるプログラムを考えてみましょう。まず、全員のデータを繰り返し取り出し、その中で一人一人の点数をif文で判定します。このように「繰り返しの中に条件分岐を入れる」という考え方は、プログラミングのパズルのようで面白い部分です。
<?php
// 生徒の名前と点数のデータ
$scores = [
'田中さん' => 85,
'佐藤さん' => 35,
'鈴木さん' => 60,
'高橋さん' => 20
];
?>
<div class="p-3 bg-light">
<h4>テスト結果一覧</h4>
<table class="table table-bordered bg-white">
<thead>
<tr><th>名前</th><th>点数</th><th>判定</th></tr>
</thead>
<tbody>
<?php foreach ($scores as $name => $score): ?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $score; ?>点</td>
<td>
<?php if ($score >= 40): ?>
<span class="badge bg-primary">合格</span>
<?php else: ?>
<span class="badge bg-danger">追試</span>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
8. エスケープ処理と安全な表示について
最後に、Webプログラミングで絶対に忘れてはいけないのが「セキュリティ」です。ユーザーが入力した文字をそのまま画面に表示すると、悪意のあるプログラムが実行されてしまう危険性があります。これを防ぐために、特殊な記号を無害な文字に変換することを「エスケープ」と呼びます。
CodeIgniterには、esc()という便利な関数が用意されています。初心者のうちは、画面に何かを表示するときは「echo esc($変数名);」と書く習慣をつけておくと、安全なサイトを作ることができます。今回のサンプルでは分かりやすさを優先して単純な表示にしていますが、実際のお仕事や公開するサイトでは、この安全対策がとても大切になります。
9. ビューファイル作成時のコツと注意点
ビューファイルは、あくまで「見た目」を担当する場所です。そのため、複雑な計算やデータベースの難しい操作は「コントローラー」という別の場所で行い、ビューでは「受け取ったデータをどう見せるか」に集中するのが良い設計とされています。これを「役割分担(関心の分離)」と呼びます。
if文やforeach文を使うときも、あまりに長く複雑になりすぎる場合は、データの方を事前に整理できないか考えてみましょう。コードがシンプルであればあるほど、後からデザインを変更したり、間違い(バグ)を見つけたりするのが楽になります。見やすいコードは、自分だけでなく、一緒に働く仲間を助けることにも繋がります。
まとめ
今回の記事では、PHPの基本である「if文」による条件分岐から、乱数生成を用いた「おみくじプログラム」、そしてデータの集合を効率よく処理する「foreach文」まで、Web開発における必須テクニックを幅広く解説してきました。特に、HTMLタグとPHPコードを混在させる際に便利な代替構文(Alternative Syntax)の活用は、コードの可読性を飛躍的に高める重要なポイントです。
Webサイトの制作現場では、単にデータを表示するだけでなく、「ログイン状態によってナビゲーションメニューを切り替える」「在庫数に応じてバッジの色を変更する」「最新の投稿5件をループで回してリスト化する」といった、動的な制御が日常的に行われています。これらはすべて、本稿で紹介したif文とforeach文、そしてデータの性質を理解することで実現可能です。
また、CodeIgniterのようなフレームワークを使用する場合、ビュー(View)側では複雑なロジックを避け、できるだけシンプルに「表示のための制御」に徹することが推奨されます。プログラムの保守性を高めるためには、タグの閉じ忘れやインデントの乱れに注意し、誰が見ても構造が理解できる「美しいコード」を書く習慣を身につけていきましょう。
現場で使える応用サンプル:動的なユーザーランク表示
学んだことを活かして、ユーザーの獲得ポイントに応じたランク表示を行う実践的なコードを書いてみましょう。ここでは、複数の条件を組み合わせたif文と、安全な出力を意識した構成にしています。
<?php
// 本来はデータベースから取得するユーザー情報
$user_name = 'タロウ';
$user_points = 750;
// ランク判定ロジック
if ($user_points >= 1000) {
$rank = 'プラチナ';
$text_class = 'text-info';
} elseif ($user_points >= 500) {
$rank = 'ゴールド';
$text_class = 'text-warning';
} else {
$rank = 'シルバー';
$text_class = 'text-secondary';
}
?>
<div class="card border-primary mb-3">
<div class="card-header fw-bold">マイページ情報</div>
<div class="card-body">
<h5 class="card-title"><?php echo $user_name; ?> 様のステータス</h5>
<p class="card-text">
現在の保有ポイント: <strong><?php echo $user_points; ?> pt</strong>
</p>
<p class="card-text">
現在のランク: <span class="badge rounded-pill bg-dark <?php echo $text_class; ?>"><?php echo $rank; ?>会員</span>
</p>
<?php if ($user_points < 1000): ?>
<div class="alert alert-light mt-3 border" role="alert">
<i class="bi bi-info-circle"></i> あと <?php echo (1000 - $user_points); ?> ポイントでプラチナランクにアップします!
</div>
<?php endif; ?>
</div>
</div>
上記のコードを実行すると、ポイントに応じてバッジの色やメッセージが動的に変化します。このように、変数と条件分岐を組み合わせることで、ユーザー一人ひとりにパーソナライズされた体験を提供できるようになります。
マイページ情報
タロウ 様のステータス
現在の保有ポイント: 750 pt
現在のランク: ゴールド会員
(あと 250 ポイントでプラチナランクにアップします! というメッセージが表示されます)
さらなるステップアップに向けて
PHPの基礎をマスターした後は、データベース(MySQLなど)との連携や、関数の自作、オブジェクト指向プログラミングといった一歩進んだ学習に進んでみてください。プログラミングの学習において最も大切なのは「実際に手を動かしてコードを書くこと」です。本記事のサンプルをベースに、自分なりのアレンジを加えて、オリジナルの機能を実装してみましょう。
エラーが出たときは、どこで処理が止まっているのかを冷静に確認してください。PHPのエラーメッセージは、解決のヒントを必ず教えてくれます。一つ一つの課題をクリアしていくことで、確実にスキルは向上していきます。あなたの開発ライフがより充実したものになるよう応援しています。
生徒
「先生、ありがとうございました!if文の代替構文を使うと、HTMLの中に埋もれていた波括弧を探さなくて済むので、すごくスッキリしますね。特におみくじの例が面白かったです!」
先生
「それは良かったです!代替構文は、デザイナーさんと一緒に作業をするときなどにも重宝されるんですよ。波括弧が一つ足りないだけで画面が真っ白になってしまうこともありますから、読みやすさは安全にも繋がります。」
生徒
「なるほど。foreach文も、以前は一つずつliタグを書いていたのが馬鹿らしくなるくらい便利ですね。配列のデータが増えても、コードを書き換えなくていいのが魔法みたいです。」
先生
「その感覚が大切です!プログラミングは『楽をするための道具』でもあります。ただ、最後に少し触れたエスケープ処理だけは忘れないでくださいね。ユーザーが自由に入力できるフォームなどを作るようになると、セキュリティ対策が必須になりますから。」
生徒
「はい、安全なコードを書く習慣をつけます!次はデータベースから取得した本物のデータを使って、ショップサイトのような一覧画面を作ってみたいです。」
先生
「素晴らしい目標ですね。その意気込みがあれば、すぐに上達しますよ。まずは今回学んだ構文をしっかり手に馴染ませて、いろんなパターンの条件分岐に挑戦してみてください!」