1

このコードを完成させる前に、間違ってテストしたところ、停止しないことに気付きました。

$var = "any"; 
for ($i=1; $i < 2; $i++){ 
    $var.$i = "any"; 
}

これが無限ループを引き起こすのはなぜですか? なぜ PHP はエラーを出さないのでしょうか?

4

4 に答える 4

5

簡単なテストを行いました:

echo $i;
 $var.$i = "any";
var_dump($var);

結果 :

1string(3) "any"
anzstring(3) "any"

したがって、$i は "anz" に変換され、ループから抜け出すための検証に合格しません。

$var.$i = "任意"; は本当に正しくありません。何をしようとしているのかわかりませんが、塗りつぶして配列したい場合は、次のようなことを行う必要があります。

$var = array();
for ($i=1; $i < 2; $i++){ 
 $var[] = "any";
}

文字列を文字ごとに変更したい場合:

$var = "any";
    for ($i=1; $i < 2; $i++){ 
     $var[$i] = "a"; // asign a new letter to the string at the $i position
    }
于 2013-07-25T11:08:33.723 に答える
1

$var.$i = "any";この式は次と同等であるため、これは正しくありません。

 $var.($i = "any");

$iこれは新しい値に割り当てられるため、while ループがチェックする条件は常に true になります。

于 2013-07-25T11:03:09.340 に答える
0

PHP5.4+。

$i == 'any' の場合、$i++ の後に 'anz' の結果が得られます。$i == 'any'、代入後、それが実際に得られるべきものです。トリックは行の「$i='any'」の部分にあります。「=」は「.」よりも優先順位が低い場合でも、なぜ $i 内に「any」を入れるべきではないと思いますか?

代わりにこれを試してください:

$var = "any"; 
for ($i=1; $i < 2; $i++){ 
 $i.$var = "anything";
}

そして、あなたのループは機能します。そして $var は「何でも」値を取得します。これはバグのようには見えません。誰かにとっては予想外の行動。

于 2013-07-26T09:55:18.917 に答える