サーチ…
前書き
ループはプログラミングの基本的な側面です。これにより、プログラマーは、指定された回数の反復または反復で繰り返されるコードを作成できます 。反復回数は明示的に(例えば6反復)行うことができ、ある条件が満たされるまで(「地獄が凍りつくまで」)続行することができます。
このトピックでは、さまざまなタイプのループ、関連する制御ステートメント、およびそれらの潜在的なアプリケーションをPHPで扱います。
構文
- for(initカウンタ;テストカウンタ;インクリメントカウンタ){/ * code * /}
- foreach(値としての配列){/ * code * /}
- foreach(キーとしての配列=> value){/ * code * /}
- while(条件){/ *コード* /}
- while(条件)while {/ * code * /}を実行します。
- anyloop {続き; }
- anyloop {[ anyloop ...] {intを続ける。 }}
- アニロップ {break; }
- anyloop {[ anyloop ...] {ブレークint; }}
備考
同じまたは類似のコードブロックを複数回実行すると便利なことがよくあります。ほとんど同じ文をコピー・ペーストするのではなく、特定の回数だけコードを実行してデータ構造を歩くためのメカニズムを提供します。 PHPは次の4つのタイプのループをサポートしています:
-
for
-
while
-
do..while
-
foreach
これらのループを制御するには、 continue
とbreak
文が使用できます。
にとって
for
ステートメントは、ステートメントまたはステートメントのブロックを何回実行するかを知っているときに使用されます。
イニシャライザは、ループ反復回数カウンタの開始値を設定するために使用されます。変数はこの目的のためにここで宣言することができ、それを$i
と命名するのは伝統的です。
次の例では、10回反復処理を行い、0〜9までの数値を表示します。
for ($i = 0; $i <= 9; $i++) {
echo $i, ',';
}
# Example 2
for ($i = 0; ; $i++) {
if ($i > 9) {
break;
}
echo $i, ',';
}
# Example 3
$i = 0;
for (; ; ) {
if ($i > 9) {
break;
}
echo $i, ',';
$i++;
}
# Example 4
for ($i = 0, $j = 0; $i <= 9; $j += $i, print $i. ',', $i++);
予想される出力は次のとおりです。
0,1,2,3,4,5,6,7,8,9,
foreach
foreach
文は、配列をループするために使用されます。
各反復のために、現在の配列要素の$value
が$value
変数に割り当てられ、配列ポインタが1つ移動され、次の反復で次の要素が処理されます。
次の例は、割り当てられた配列内の項目を表示します。
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
echo "I love to eat {$value}. ";
}
予想される出力は次のとおりです。
I love to eat apple. I love to eat banana. I love to eat cherry.
foreachを使用して、値のキー/インデックスにアクセスすることもできます。
foreach ($list as $key => $value) {
echo $key . ":" . $value . " ";
}
//Outputs - 0:apple 1:banana 2:cherry
デフォルトでは、 $value
は$list
の値のコピーです。そのため、ループ内の変更は$list
に反映されません。
foreach ($list as $value) {
$value = $value . " pie";
}
echo $list[0]; // Outputs "apple"
foreach
ループ内で配列を変更するには、 &
演算子を使用して参照によって$value
を割り当てます。あとで変数をunset
することが重要です。そのため、 $value
を再利用すると配列を上書きしないようにします。
foreach ($list as &$value) { // Or foreach ($list as $key => &$value) {
$value = $value . " pie";
}
unset($value);
echo $list[0]; // Outputs "apple pie"
また、現在の項目の配列キーを参照して、 foreach
ループ内の配列項目を変更することもできます。
foreach ($list as $key => $value) {
$list[$key] = $value . " pie";
}
echo $list[0]; // Outputs "apple pie"
ブレーク
break
キーワードは、現在のループを直ちに終了します。
continue
文と同様に、 break
はループの実行を停止します。ただし、 continue
文とは異なり、 break
はループの即時終了を引き起こし、条件文を再度実行しません 。
$i = 5;
while(true) {
echo 120/$i.PHP_EOL;
$i -= 1;
if ($i == 0) {
break;
}
}
このコードは、
24
30
40
60
120
$i
が0の場合は実行されず、0で除算されるために致命的なエラーが発生します。
breakステートメントは、いくつかのレベルのループから抜け出すためにも使用できます。このような動作は、ネストされたループを実行するときに非常に便利です。たとえば、文字列の配列を出力文字列にコピーするには、出力文字列が完全に160文字になるまで#
記号を削除します
$output = "";
$inputs = array(
"#soblessed #throwbackthursday",
"happy tuesday",
"#nofilter",
/* more inputs */
);
foreach($inputs as $input) {
for($i = 0; $i < strlen($input); $i += 1) {
if ($input[$i] == '#') continue;
$output .= $input[$i];
if (strlen($output) == 160) break 2;
}
$output .= ' ';
}
break 2
コマンドは、内部ループと外部ループの両方の実行を直ちに終了します。
一方を行います
do...while
ステートメントは少なくとも1回はコードブロックを実行し、条件が真である限りループを繰り返します。
次の例では、 $i
の値を少なくとも1回インクリメントし、25未満の値を持つ限り変数$i
をインクリメントし続けます。
$i = 0;
do {
$i++;
} while($i < 25);
echo 'The final value of i is: ', $i;
予想される出力は次のとおりです。
The final value of i is: 25
持続する
continue
キーワードは、ループの現在の反復を停止しますが、ループを終了しません。
break
ステートメントのように、 continue
ステートメントはループ本体の内側にあります。実行されると、 continue
ステートメントは実行をただちに条件付きループにジャンプさせます。
次の例では、ループは配列内の値に基づいてメッセージを出力しますが、指定された値をスキップします。
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
if ($value == 'banana') {
continue;
}
echo "I love to eat {$value} pie.".PHP_EOL;
}
予想される出力は次のとおりです。
I love to eat apple pie.
I love to eat cherry pie.
continue
ステートメントは、ジャンプするループレベルの数を指定することによって、ループの外部レベルへの実行をただちに続行するためにも使用できます。たとえば、次のようなデータを考えてみましょう。
フルーツ | 色 | コスト |
---|---|---|
林檎 | 赤 | 1 |
バナナ | 黄 | 7 |
チェリー | 赤 | 2 |
グレープ | 緑 | 4 |
5未満の価格の果物からのみパイを作るために
$data = [
[ "Fruit" => "Apple", "Color" => "Red", "Cost" => 1 ],
[ "Fruit" => "Banana", "Color" => "Yellow", "Cost" => 7 ],
[ "Fruit" => "Cherry", "Color" => "Red", "Cost" => 2 ],
[ "Fruit" => "Grape", "Color" => "Green", "Cost" => 4 ]
];
foreach($data as $fruit) {
foreach($fruit as $key => $value) {
if ($key == "Cost" && $value >= 5) {
continue 2;
}
/* make a pie */
}
}
continue 2
ステートメントが実行されると、実行はすぐに外側のループを継続して$data as $fruit
にジャンプし、他のすべてのコードをスキップします(内部ループの条件を含む)。
while
while
文は、テスト式が真である限り、コードブロックを実行します。
テスト式が真の場合、コードブロックが実行されます。コードが実行された後、テスト式は再び評価され、テスト式が偽となるまでループが継続されます。
次の例では、終了する前に合計が100になるまで繰り返します。
$i = true;
$sum = 0;
while ($i) {
if ($sum === 100) {
$i = false;
} else {
$sum += 10;
}
}
echo 'The sum is: ', $sum;
予想される出力は次のとおりです。
The sum is: 100