サーチ…


前書き

ループはプログラミングの基本的な側面です。これにより、プログラマーは、指定された回数の反復または反復で繰り返されるコードを作成できます 。反復回数は明示的に(例えば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

これらのループを制御するには、 continuebreak文が使用できます。

にとって

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow