2012-01-28 13 views
1

&& $f<4を削除すると次のコードはうまく動作しますが、それでは機能しません。whileループが期待通りに機能しない

PHP:

$titles=array(); 
$f=0; 
while ($row=mysql_fetch_assoc($query) && $f<4){ //this line doesn't work 
     $titles[]=$row['questiontitle']; 
      echo "<div class='questionPreview'>$titles[$f]</div>"; 
      $f++; 
     } 
+1

は「動作しない」を定義します。 – deceze

+0

@deceze不等式が削除されてもdivは機能しますが、タイトルはありません。私が不平等を取り除くと、divとタイトルが得られます。 – kirby

答えて

5

私が正しくあなたを解釈するならば、私はあなたが優先順位の問題を抱えていると思います。 &&がより高いprecedenceを持っているためであること

$ php -r 'var_dump($row = pow(2,2) && true,$row);' 
bool(true) 
bool(true) 
$ php -r 'var_dump($row = pow(2,2) && false,$row);' 
bool(false) 
bool(false) 

powは、ここではランダム関数である)

$rowではなく、配列trueあるので

while (($row=mysql_fetch_assoc($query)) && ($f<4)){ 
+2

より良い方法は、式の順序を変更し、$ f <4を最初にすることです。 $ f> = 4のときは無駄なフェッチを行いません。 – meze

1

おそらくすなわち:これを試してみてください=。いつものように、()で解決:

while (($row = mysql_fetch_assoc($query)) && $f<4){ 
2

=has lower precedence than&&。これは、&&演算子が最初に評価されることを意味します。

これはあなたのコードは、実際には、このようになっていることを意味しますので、

while ($row = (mysql_fetch_assoc($query) && $f<4)){ //this line doesn't work 

、他の言葉で、MySQLのクエリとの比較を行い、そして、彼らは両方とも該当する場合、true$rowを設定します。それ以外の場合は、falseに設定します。

あなたは右の操作が行われていることを確認するために括弧を使用する必要があります。

while (($row=mysql_fetch_assoc($query)) && ($f<4)){ 
+0

あるいは、単に&&の代わりに 'AND'を使うだけです。 – hakre

関連する問題