手動か自動か
「同じ文字を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万回の処理を実行できます。
手作業の呪縛から解き放たれ、圧倒的な速度の世界へ足を踏み入れましょう。ただし、出口のないループにだけは気をつけてください。永遠に彷徨うことになります。

コメント