2012-08-15 129 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.