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 />";
}
ループは、条件が と評価された場合にのみ実行されtrueます。最初の反復で$z == $cntは はfalseであるため、ループは実行されません。
一般的なループ戦略は、センチネル値を使用することです:
$cnt = 5;
$stop = $cnt + 1;
for ($z = 0; $z != $stop; $z++) {
. . .
}
比較は負 (!=または!==) であることに注意してください。センチネルの使用は通常、数値ループ変数には不要ですが (投稿されたコードにはお勧めしません)、他の状況 (たとえば、 を$stop表すときnull、不正な値など) には便利です。簡潔に特徴付けるのが容易ではないパターンでループ変数が変化する場合に特に役立ちます。
最初の反復$z != $cntであるため、ループはすぐに停止します。
の構文forは次のとおりです。
for (<init>; <condition>; <increment>)
<condition>ループは各反復の前にテストします。の場合true、その反復を実行します。の場合false、ループは終了します。
あなたの場合、最初の反復の前であるため$z == $cnt、falseループはすぐに終了します。
必要なことを行うには、テストを反転します。<=また、元のバージョンではではなく が使用されていたため、最終値を 1 つ上げる必要があります<。$cnt+1どちらの場合も、 0 から開始するため、ループが実行されることに注意してください。
for ($z = 0; $z != $cnt+1; $z++)
これをコンピュータの観点から見てみましょう。
もし私がコンピュータなら、これはあなたが私にそうするように言ったことです:
問題は、5 が 0 に等しくならないことです。したがって、ループは単純にスキップされます。ループ内に $cnt = $z+1 がある場合、これは無限ループになります。
つまり、== は問題なく機能しますが、本来すべきと考えていることを単純に実行しません。
お役に立てれば!