2012-08-15 47 views
7

whileループで複数の条件を記述することはできますか?そうでない場合、代替手段は何ですか?私はそれを試して、whileループの条件を設定するコード行に関するエラーで返されました。ここに私が意味するものの例があります。 $s < 5周りwhileループと複数条件

while (($result_row = mysql_fetch_assoc($query)) && ($s < 5)) 

括弧は、ここで必要とされていないが、私は」:可能ですが、=が低く持っているので、あなたの文が正しく解釈されていることを確実にするために括弧を必要precedence&&より

$s = 1; 

while ($result_row = mysql_fetch_assoc($query) && $s < 5) 
{ 
echo $result_row['id']; 
$s++; 
} 
+1

確かに可能です。それを試しましたか?多くのコンポーネントが持つかもしれないが、全体のwhile条件はTRUEまたはFALSEに評価されなければならない。それが唯一の要件です。そのような複合ステートメントで代入を行うときは注意してください。しかし、 '$ result_row'は、演算子の優先順位のために期待するものを得ることができません。 –

+1

あなたのロジックは正しいです。エラーは何を正確に言いますか? –

+1

他の制御構造とまったく同じように可能です。真偽に評価するだけです。 – j08691

答えて

22

明確にするためにそれらを含めた。

しかし、LIMIT 5を追加すると、クエリを5行だけ戻すように変更する方が簡単です。

SELECT ... 
FROM yourtable 
ORDER BY ... 
LIMIT 5 
+1

さらに良い:[mysqli_stmt_num_rows()](http://www.php.net/manual/en/mysqli-stmt.num-rows.php) – ghoti

+0

リンク先の優先順位は、ここで二番目の内側の括弧を必要としません。それらをそこに置くことを示唆するのは少し誤解を招くようです。しかし、彼らは傷つくことはありません。 – hakre

0

私はそれで間違って何も見えませんでした。もう一方の方法は、このようなことをすることです。

$s = 1; 
while ($result_row = mysql_fetch_assoc($query)) 
{ 
    if($s < 5) { 
     //enter the condition 
    } 
    $s++; 
} 
0

$result_rowの値は、おそらく真っぽいと$smysql_fetch_assoc($query)返す何かが辞書がもはや作品として$result_rowを読まないようにしようとするので、5未満であるかどうかのブール条件に設定されています。

あなたは物事が解析され得る方法を正確に指定するために括弧を使用することができます。

while (($result_row = mysql_fetch_assoc($query)) && ($s < 5)) 

この方法は、$result_rowは、あなたが望むものである、mysql_fetch_assoc($query)に設定ループは限り論理値として続けますその割り当ての何かがtrue-ishを返すだけでなく、sが5未満です。