1

PHP の for ループで double equals が機能しないのはなぜですか? 以下の作品:

$cnt = 5;
for ($z = 0; $z <= $cnt; $z++) {
    echo $z."!<br />";
}

しかし、なぜこれが機能しないのでしょうか。

$cnt = 5;
for ($z = 0; $z == $cnt; $z++) {
    echo $z."!<br />";
}
4

5 に答える 5

3

ループは、条件が と評価された場合にのみ実行されtrueます。最初の反復で$z == $cntは はfalseであるため、ループは実行されません。

一般的なループ戦略は、センチネル値を使用することです:

$cnt = 5;
$stop = $cnt + 1;
for ($z = 0; $z != $stop; $z++) {
    . . .
}

比較は負 (!=または!==) であることに注意してください。センチネルの使用は通常、数値ループ変数には不要ですが (投稿されたコードにはお勧めしません)、他の状況 (たとえば、 を$stop表すときnull、不正な値など) には便利です。簡潔に特徴付けるのが容易ではないパターンでループ変数が変化する場合に特に役立ちます。

于 2013-08-01T18:35:43.683 に答える
1

最初の反復$z != $cntであるため、ループはすぐに停止します。

于 2013-08-01T18:35:45.613 に答える
1

の構文forは次のとおりです。

for (<init>; <condition>; <increment>)

<condition>ループは各反復の前にテストします。の場合true、その反復を実行します。の場合false、ループは終了します。

あなたの場合、最初の反復の前であるため$z == $cntfalseループはすぐに終了します。

必要なことを行うには、テストを反転します。<=また、元のバージョンではではなく が使用されていたため、最終値を 1 つ上げる必要があります<$cnt+1どちらの場合も、 0 から開始するため、ループが実行されることに注意してください。

for ($z = 0; $z != $cnt+1; $z++)
于 2013-08-01T18:37:01.630 に答える
1

これをコンピュータの観点から見てみましょう。

もし私がコンピュータなら、これはあなたが私にそうするように言ったことです:

  • $cnt = 5 を設定します。
  • $z = 0 に設定します。
  • $z が $cnt に等しいかチェック
  • その場合、ループ内の処理をすべて実行し、$z をインクリメントします

問題は、5 が 0 に等しくならないことです。したがって、ループは単純にスキップされます。ループ内に $cnt = $z+1 がある場合、これは無限ループになります。

つまり、== は問題なく機能しますが、本来すべきと考えていることを単純に実行しません。

お役に立てれば!

于 2013-08-01T18:37:42.540 に答える