16

プログラミングの勉強を始めたばかりです。for ループについて勉強していますが、このプログラムは期待どおりに動作しません。$a出力を取得する3ためにループを中断したいのです が、出力として1 2取得3します:(

for($a=0;$a<10;++$a)
{
       if($a==3)
               break
       print"$a ";
}

助けてください。

4

6 に答える 6

41

にセミコロンがありませんbreak


プログラムがそのように動作する理由を知ることは、かなり興味深いことです。

breakPHPの一般的な構文は次のとおりです。

break Expression;

式はオプションですが、存在する場合、その値はネストされた囲み構造がいくつ分割されるかを示します。

break 0;break 1;同じですbreak;

あなたのコードはと同等です

if($a==3)
       break print"$a ";

現在、printPHP の関数は常に を返し1ます。したがって、それは

if($a==3)
       break 1;

それで、いつその$a3を印刷して休憩しますか。

本体に単一のステートメントがある場合でも、中括弧を使用して条件またはループの本体を囲むことをお勧めします。この場合、if本文を中かっこで囲みます。

if($a==3) {
  break
}
print"$a ";

PHP は a を期待している;が、a を見つけます。}

上記のすべては PHPcontinueにも当てはまります。だからプログラム

for($a=0;$a<10;++$a)
{
       if($a==3)
               continue
       print"$a ";
}

3も同様の理由で印刷されます。

于 2010-09-05T18:41:12.783 に答える
19

ブレークの最後にセミコロンがありません。;)

0また、セミコロンを使用しても、からからまでカウントされるため、期待どおりには機能しません2。のみを取得するには、このように記述する必要があります1 2

<?php
for($a=1;$a<10;++$a)
{
   if($a==3)
           break;
   print"$a ";
}
?>

$a は for ループの初期化の 1 つであることに注意してください。

編集:あなたが知っておくべきもう1つのことに気づきました。for ループ コントロールには、プレインクリメント ( ++$a) があります。これは基本的に、PHP が の値をインクリメントして$aから を返すことを意味します$a。もう 1 つのオプションは、ポスト インクリメント ( $a++) です。ここでは、$aが返されてから 1 ずつインクリメントされます。

あなたの場合、どちらの方法でも正しい出力が得られます。

これは時々非常に重要です。それを覚えておいてください。

于 2010-09-05T18:43:36.723 に答える
4

codaddict が言ったように、ブレーク後にセミコロンがありません。

コードは次のようになります。

for($a=0;$a<10;++$a)
{
       if($a==3)
           break;
       echo $a, ' ';
}
于 2010-09-05T18:43:29.577 に答える
3
for($a=0;$a<10;++$a)
{
       if($a==3) break;
       print $a;
}

@Downvoters: 私が簡潔である以外に何が問題なのですか?

于 2010-09-05T18:42:52.547 に答える
0
for($a=0;$a<10;$a++) {
   if($a==3) { exit; }
   else { echo $a; }
}
于 2010-09-06T00:32:02.387 に答える
0

echoの代わりに使用しprintます。

于 2010-09-06T06:33:33.977 に答える