for ステートメントは、PHP (および多くの言語) のループ制御部分で最も基本的なステートメントであると言えます。for ステートメントの実行規則と基本的な使用法についてはここでは説明しません。 PHPマニュアルのセクション。その構文は、PHP マニュアルで次のように定義されています。
for ループ ステートメント は、PHP 言語で最も複雑なループ ステートメントです。その構文は次のとおりです:
for (expr1; expr2; expr3) ステートメント
例
コードは次のとおりです | コードをコピー |
このインスタンスによって返される表示結果は次のとおりです: 12345 |
for ステートメントの便利なバリエーションをいくつか紹介します。
1. 無限ループ
1 つ目は、誰もが知っている無限ループ (「デッド ループ」とも呼ばれます) です。空の式 null は構文的に有効であるため、for ステートメントの 3 つの式を空のままにすることができます。これにより、ネストされた for ステートメントが継続的に実行されます。
コードは次のとおりです | コードをコピー |
(;;) { |
一部のタスクでは無限ループを使用しますが、ほとんどのプログラム タスク、特に PHP に関連するタスクでは、無限ループを使用するときにループを終了するための条件が追加されます。
コードは次のとおりです | コードをコピー |
(;;) { |
2. 空の式を使用する
次のステップでは、初期化ステートメント expr1 での null 構文の使用について説明します。 expr1 を空白のままにする最も一般的な機能は、より複雑な初期化作業を完了することです。
コードは次のとおりです | コードをコピー |
if (isset($i)) { for (;$i
エコー $i; |
同様に、反復式 expr3 を空白のままにすることもできます。これは、さまざまな条件に応じてさまざまな反復を呼び出すなど、より複雑な反復を記述するためにも使用できます。
for ステートメント内の条件ステートメント expr2 を空白のままにすると、前述の無限ループになります。もちろん、ループから抜け出すタイミングを決定するために、より複雑な条件を追加することもできますが、ここでは繰り返しません。
3. 複数のサイクル
複数のループを使用して複数の変数を制御することも、for ステートメントで見落とされがちな機能です。以下の例のように、一般的なタスクでは 2 つのループが一般的に使用され、3 つ以上のループは通常あまり意味がありません。
コードは次のとおりです | コードをコピー |
for ($i = 0, $j = 10;$i
echo "$i + $j = 10rn"; 上記のコードは次のように出力されます: 0 + 10 = 10 |
4. より複雑な表現
for ステートメントの 3 つの式がより複雑に記述されている場合、それらを使用してアルゴリズムを最適化できます。ループ本体のない for ステートメントを使用して、一部のタスクを完了することもできます。たとえば、累積または階乗を計算する場合:
コードは次のとおりです | コードをコピー |
//1-5の累積結果を計算し、ビンの値を$j //1-5の階乗結果を計算し、ビン値を$jに設定します ?> |
for ループを使用して、過去 3 か月のデータを返します。 str_pad(intval($month),2,0,STR_PAD_LEFT) で前月の時刻を簡単に取得できることは誰もが知っています。
コードは次のとおりです | コードをコピー |
$y = date('Y');// 現在の時刻と年を取得します $m = date('m');//現在の時刻と月を取得します if($m == 1) $time = ($y-1).'-12';//1 月の場合、最後の月は昨年の 12 月なので、ここで年を 1 引く必要があります else $time = $y."-".str_pad(intval($m-1),2,0,STR_PAD_LEFT);//先月の時刻を取得します ?> |
最初の 3 か月のデータが必要な場合、明らかにこの処理方法では不十分であり、同様のコードが繰り返し実行されるため、現時点では for ループが適切な選択です。
コードは次のとおりです | コードをコピー |
//ループ変数の説明 $sm は開始月、$em は終了月です if($m == 1) { $sm = 11;//現在の月は 1 月です。過去 3 か月で計算すると、開始月は昨年の 11 月になります $em = 13;//これは for ループの終了マークとして使用されます。終了月は今年の 1 月です。これはループを容易にするためです。 } elseif($m == 2) { $sm = 12;//上記と同じ $em = 14; } それ以外 { $sm = $m - 3; $em = $m; } for($x=$sm;$x { if($m == 1 || $m == 2) { if($x >= 11) $ny = $y - 1;//実際の年は去年です if($x >= 13) $x = $x - 12;//実際の月は今年です } それ以外の場合 $ny = $y; //無事に年と月が取得できたので、後々の処理が楽になります... } ?> |