Menu

PHPのfor文:書き方、配列のループ、breakとcontinue

for ($i = 0; $i < 10; $i++) { ... } は、ブロックを決まった回数だけ実行します。開始値、各回の前に調べる条件、ステップの3つで構成されます。添字を使った配列のループ、カウントダウン、ネストしたループ、breakとcontinueを扱います。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

for ($i = 0; $i < 5; $i++) { ... }は、ブロックを決まった回数だけ実行します。3つの部分は、開始($i = 0、1回だけ実行)、条件($i < 5、各回の前に確認)、ステップ($i++、各回のあとに実行)です。条件がfalseになった時点でループは終わります。

ループのあとも$iは存在し、条件をfalseにした値(6)を持っています。PHPにはループ変数のブロックスコープがありません。

添字を使って配列をループする

キーが0, 1, 2 ...のリストなら、カウンターがそのまま添字になります。毎回呼び出さずにすむよう、先にcount()を変数に入れておきます。

最初の部分にはカンマで区切って複数の式を書けるので、$n = count($fruits)を1回だけ設定できます。各値だけが必要で(隣の要素は不要で)あれば、foreachのほうが短く、キーが0からn - 1でない配列にも使えます。

カウントダウンと2以上の刻み

ステップにはどんな式でも書けます。カウントダウンなら$i--、1つおきの数なら$i += 2、2のべき乗なら$i *= 2です。

range('a', 'h')は配列['a', 'b', ... 'h']を作ります。range(1, 10)とforeachを使えばforループと同じように数えられますが、先に配列全体を作るコストがかかります。

breakとcontinue

breakはループをすぐに終わらせます。continueは現在の回の残りを飛ばし、ステップと次の条件の確認に進みます。

2つ目のループは条件が空で、これは「常にtrue」を意味するので、breakまで実行されます。ネストしたループでは、次の例のようにbreak 2とcontinue 2が外側のループに作用します。

ネストしたforループ:九九の表

ループの中のループは、外側の1回ごとに内側のループを最後まで実行します。ここでは出力がHTMLなので、Pageタブに本物の表が表示されます。

$sizeを12に変えて、もう一度実行してみてください。for (...):とendfor;の形は、HTMLタグの間でもループを読みやすく保つ別の構文です。同じ表をプレーンテキストで作り、break 2で両方のループを止める例です。

よくあるミス:1つずれと終わらないループ

forの定番のバグは2つです。count()と<=を使うと末尾の1つ先の要素を読もうとし、PHPはそれをWarning: Undefined array key 3として報告し、nullとして扱います。もう1つは、カウンターを終わりに向かって動かさないステップ($i++のつもりで$i--と書く)で、条件がいつまでもtrueのままになります。

ファイルの終わりまで読むときのように、長さを事前に知ることができないループには、whileループのほうが合っています。

よくある質問

PHPで添字を使って配列をループするには?

キーが0、1、2のリストならfor ($i = 0; $i < count($arr); $i++) { echo $arr[$i]; }を使います。たいていのコードではforeach ($arr as $i => $value)のほうが簡単で、同じ添字が得られ、キーが0からn-1でない場合にも使えます。

PHPでforループを抜けるには?

break;ですぐにループを抜けます。ネストしたループの中では、break 2;で内側のループとその外側のループの両方を抜けます。continue;は現在の回の残りを飛ばして次の回に進みます。

PHPのfor文でカウントダウンするには?

大きい値から始め、>=で比較して減らします:for ($i = 10; $i >= 1; $i--) { echo $i; }。1以外の刻みにするには、3つ目の部分を$i += 2や$i -= 5のように変えます。

PHPでforeachではなくforを使うのはどんなときですか?

何かを数えるとき(5回繰り返す、1から100までの数、1つおきの要素)や、添字で次や前の要素が必要なときはforを使います。配列のすべての要素を順に見るとき、特に数値の添字がない連想配列ではforeachを使います。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める