2012-08-15 131 views
7

是否有可能在while循環中寫入多個條件?如果不是,還有什麼替代方案?我試過了,並且返回了一條與設置while循環條件的代碼行有關的錯誤。這是我的意思的一個例子。while循環和多個條件

$s = 1; 

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

確定這是可能的。你試過了嗎?整個「while」條件,無論它有多少組件,都必須評估爲TRUE或FALSE。這是唯一的要求。在像這樣的複合語句中做一個賦值時要小心,儘管...由於運算符的優先級,'$ result_row'可能沒有得到你所期望的。 – 2012-08-15 21:01:57

+1

你的邏輯是正確的。錯誤說的是什麼? – 2012-08-15 21:01:58

+1

絕對有可能就像其他任何控制結構一樣。它只需評估爲真或假。 – j08691 2012-08-15 21:02:04

回答

22

這是可能的,但由於=具有較低precedence&&你需要括號,以確保您的語句是正確解釋:

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

左右$s < 5括號是這裏不需要,但我爲了清楚起見,已經包括了它

但是,僅通過添加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 2012-08-15 21:03:45

+0

鏈接的優先順序不需要第二個內部的括號對,所以建議把它們放在那裏似乎有點誤導。但他們不會傷害。 – hakre 2012-08-15 22:30:17

0

,而我認爲沒有錯在。另一方面是做這樣的事情。

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

$result_row值可能被設置爲mysql_fetch_assoc($query)回報一些真實的事情十歲上下$s是否小於5。所以想讀$result_row作爲字典不再適用於布爾條件。

您可以使用括號來指定事情變得究竟是如何解析:

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

這樣,$result_row被設置爲mysql_fetch_assoc($query),這是你想要的,循環一直連續的邏輯值的作業返回true-ish,以及s小於5.