【PHP初心者向け】PHPループをおもしろく解説!for・foreach・whileの使い分けと無限地獄の回避術

ループ プログラミング

手動か自動か

「同じ文字を100回表示しろ」と言われたら、あなたは100回コピペしますか。

それは時間の無駄であり、知性の敗北です。

コンピューターは、反復作業のために生まれた存在です。疲れない、文句を言わない、間違えない。この絶対的な労働力を活用するための命令こそが「ループ(繰り返し)処理」です。

PHPには3つの主要なループ構文があります。

それぞれの性格はまるで違います。適材適所で使い分けなければ、コードはスパゲッティのように絡まり合い、最悪の場合、永遠に終わらない「無限ループ」となってブラウザをフリーズさせます。


for文:回数至上主義の鬼軍曹

for文は、あらかじめ「回数」が決まっているときに使います。「校庭を10周してこい」という体育会系の命令です。

構造は少し厳格です。開始地点、終了条件、そして歩幅。これらをきっちり指定する必要があります。

// 0から始まって、10より小さい間、1ずつ増やす
for ($i = 0; $i < 10; $i++) {
    echo $i . "回目のスクワット<br>";
}Code language: PHP (php)

仕組みの解剖

  • $i = 0: カウンターの初期化。変数$i(indexの略が一般的)を0にセット
  • $i < 10: 条件。これが正しい間はずっと繰り返す。「10回」ではなく「10より小さい間」というのがミソ
  • $i++: 増減式(この場合「–」ではなく「++」なので1ずつ増える)。1周終わるたびに、カウンターを1増やす

非常に規律正しく、指定した回数だけきっちり仕事をします。データの数が「10個」とか「100個」と分かっているなら、こいつが強力です。


foreach文:全部出し切るまで終わらない在庫処分

配列(データの束)を扱うなら、迷わずforeach文を使ってください。これはPHPが誇る最高に便利な構文です。

「箱の中身が空っぽになるまで全部出せ」

という指示を出せます。カウンターの数字($i)を管理する必要がありません。何回繰り返せばいいか、プログラムが勝手に判断します。

$sushi_neta = ["マグロ", "サーモン", "いくら", "ウニ"];

foreach ($sushi_neta as $neta) {
    echo $neta . "を食べました。<br>";
}Code language: PHP (php)

仕組みの解剖

foreach ($データ箱 as $取り出した中身)

箱(配列)からデータを一つ取り出し、一時的な変数に入れて、{ }の中を実行。次のデータがあればまた実行。なければ終了。

これをfor文で書こうとすると、「箱の中にいくつ入っているか」を数える作業(count関数やsizeof関数等)が発生し、面倒な上にミスを誘発します。

リストや配列を表示するときは、思考停止してforeachを使う。初心者のうちにこれを覚えちゃいましょう。


while文:終わりの見えないチキンレース

最後にwhile文。こいつは危険です。

for文のように回数を決めません。「条件が合っている限り、永久に続けろ」という命令です。

RPGの戦闘シーンを想像してください。「敵のHPが0より大きい間、攻撃し続ける」。攻撃が1回で済むのか、100回かかるのかは分かりません。

$hp = 100;

while ($hp > 0) {
    echo "勇者の攻撃!<br>";
    $hp = $hp - 20; // ここ重要:HPを減らす処理
}
echo "敵を倒した!";Code language: PHP (php)

最悪の事故「無限ループ」

while文を使うとき、最も注意すべき点があります。それは「終わる条件に近づく処理」を書くことです。

上の例で $hp = $hp - 20; を書き忘れたらどうなるか。

HPはずっと100のままなので、「HPは0より大きいか?」という問いは永遠に「YES」のまま。

プログラムは終わりのない攻撃を秒間何万回も繰り返し、メモリを食い尽くし、最終的にサーバーかあなたのブラウザが応答不能になります。

画面が固まり、ファンが爆音で回りだしたら、それが無限ループです。

whileを使うときは、冷や汗をかきながらコードを見直してください。必ず「脱出口」を用意するのです。


まとめ:支配者になれ

3つのループの使い分けは以下の通り。

  • for文:回数が決まっているなら、規律正しいこれ
  • foreach文:配列の中身を全処理するなら、便利なこれ
  • while文:回数不明で条件次第ならこれ。ただし無限ループに注意

ループ処理を使いこなせば、1行のコードで1万回の処理を実行できます。

手作業の呪縛から解き放たれ、圧倒的な速度の世界へ足を踏み入れましょう。ただし、出口のないループにだけは気をつけてください。永遠に彷徨うことになります。

コメント

タイトルとURLをコピーしました