forループ文とwhileループ文
制御構造
制御構造は、プログラムの実行フローを制御するための構造や命令のことです。プログラミング言語において、特定の条件に基づいて命令の実行を決定したり、ループを実行したり、あるいは他のプログラムのフローを制御するための仕組みを指します。条件文、ループ文、分岐文などがその例で、それらを組み合わせてプログラムの実行順序や条件に合わせた動作を実現します。制御構造はプログラムの論理的な流れを決める重要な要素です。
繰り返し処理 (ループ処理)
forループ文
for文は、反復処理を行うための制御構造です。特定の回数だけ処理を繰り返す際に便利です。
1から100までの数値を出力するときのように、繰り返しで1~100まで出力したい場合、
となりますが、繰り返しで何かを行いたいときには繰り返し文を用います。
繰り返しの処理(ループ処理)を以下の図のようにたった数行で書くことが出来ます。
<?php
for ($i = 1; $i <= 100; $i++) {
初期化; ループの条件; 変数の更新(インクリメントしている);
echo $i;
繰り返す処理
echo '<br>';
改行するため
}
?>
※( ) 丸括弧内の最後の「;」セミコロンは、いりません。
※ for文は、「;」セミコロンで区切られた3つのステートメントで構成されています。
whileループ文
while文は、条件が満たされている間にコードを実行する制御構造です。
<?php
$i = 1
初期化
while($i<=100){
ループの条件
echo $i;
繰り返す処理
$i++;
変数の更新(インクリメントしている)
echo '<br>';
改行するため
}
?>
上記のコードは$iがインクリメントされています。これにより、条件 $i <= 100 が eventually false になり、ループが終了します。
無限ループ
$i = 1; // 初期化
while ($i <= 100) {
echo $i;
}
出力:
$i の更新が行われていないため、$i の値は変わらずにひたすら1が続きます。
for文やwhile文は、条件が常に真(true)の場合には無限ループになります。無限ループはコンピューターに極端な負担を与えてしまうため、ループ処理を記述する際は条件式がどこかでfalseになるよう(無限ループを止めるには、$i の値の更新が必要 $i++; )に気をつけなければいけません。
$i = 1; // 初期化
while ($i <= 100) {
echo $i;
$i の値の更新が必要
$i++; //$i の更新
}
出力:
$i はループごとに1ずつ増加し、条件 $i <= 100 がいつか偽になるまでループが実行されます。
break文
break文は現在のループを強制的に中断する命令です。for, while, foreachなどの繰り返し文の中で利用できます。break文はif文などの条件文と組み合わせて利用するのが一般的です。
for ($i = 1; $i <= 10; $i++) {
if ($i > 5) {
break; // $iの値が6になった段階でfor文を終了
}
echo $i; // 出力
}
//結果:12345
//改行されていない
break; のみで記入
// ループを抜ける
continue文
continue文は現在の周だけをスキップし、ループそのものは継続して実行します。continue文はif文の条件文と組み合わせて利用するのが一般的です。これはfor、while、foreachなどの繰り返し文で利用できます。
for ($i = 1; $i <= 10; $i++) {
if($i%3==0){
continue;
//$iの値が3の倍数の時はcontinue文が実行されて、その周のループが終了します。
//そのため、3の倍数の場合はecho $i;が実行されず、表示されません。
}
echo $i; //出力
}
結果:12457810(3の倍数以外)
continue; のみで記入
// 一時的に処理をスキップ
ネスト(入れ子)
入れ子やネストとは、一つの繰り返し構造(ループ)の中に別の繰り返し構造(ループ)を含めることを指します。これを特に2つの繰り返し構造が入れ子になっている場合には「2重ループ」と呼びます。そのため、内側のループが外側のループの一回の実行ごとに複数回実行される構造が、入れ子やネスト、2重ループの典型的な例です。
for ($i = 1; $i <= 3; $i++) { // 外側のループ
for ($j = 1; $j <= 3; $j++) { // 内側のループ
echo "外側ループ: $i, 内側ループ: $j\n";
}
}
//出力:
// 外側ループ: 1, 内側ループ: 1
// 外側ループ: 1, 内側ループ: 2
// 外側ループ: 1, 内側ループ: 3
// 外側ループ: 2, 内側ループ: 1
// 外側ループ: 2, 内側ループ: 2
// 外側ループ: 2, 内側ループ: 3
// 外側ループ: 3, 内側ループ: 1
// 外側ループ: 3, 内側ループ: 2
// 外側ループ: 3, 内側ループ: 3
このコードでは、2つのループが使われています。外側のループは`$i`が1から3まで変化し、内側のループは`$j`が1から3まで変化します。
外側のループが1回目のとき、内側のループは1から3まで3回繰り返されます。外側のループが2回目のときも同様に内側のループが3回繰り返されます。そして外側のループが3回目のときも内側のループが3回繰り返されます。
合わせて、外側のループが3回、内側のループがそれぞれ3回繰り返されるので、全体として9回の出力が行われます。
この記事が気に入ったらサポートをしてみませんか?