2012-08-15 64 views
7

Có thể viết nhiều điều kiện trong một vòng lặp while không? Nếu không, lựa chọn thay thế là gì? Tôi đã thử nó và đã được trả lại với một lỗi liên quan đến dòng mã mà thiết lập các điều kiện cho vòng lặp while. Đây là một ví dụ về ý tôi.Khi vòng lặp và nhiều điều kiện

$s = 1; 

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

Chắc chắn điều đó là có thể. Bạn đã thử à? Toàn bộ điều kiện 'while', tuy nhiên nhiều thành phần có thể có, phải được đánh giá là TRUE hoặc FALSE. Đó là yêu cầu duy nhất. Hãy thận trọng khi thực hiện một nhiệm vụ trong một câu lệnh ghép như vậy ... '$ result_row' có thể không nhận được những gì bạn mong đợi do quyền ưu tiên của toán tử. –

+1

Logic của bạn là chính xác. Lỗi chính xác nói gì? –

+1

Hoàn toàn có thể giống như bất kỳ cấu trúc điều khiển nào khác. Nó chỉ phải đánh giá đúng hoặc sai. – j08691

Trả lời

22

Đó là có thể, nhưng vì = có thấp hơn precedence hơn && bạn cần dấu ngoặc đơn để đảm bảo rằng báo cáo của bạn được giải thích một cách chính xác:

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

Dấu ngoặc xung quanh $s < 5 không phải ở đây, nhưng tôi đã bao gồm chúng cho rõ ràng.

Tuy nhiên, sẽ dễ dàng hơn khi sửa đổi truy vấn của bạn để chỉ trả về 5 hàng, bằng cách thêm LIMIT 5.

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

Thậm chí tốt hơn: [mysqli_stmt_num_rows()] (http://www.php.net/manual/en/mysqli-stmt.num-rows.php) – ghoti

+0

Ưu tiên được liên kết không yêu cầu cặp dấu ngoặc bên trong thứ hai ở đây, vì vậy nó có vẻ hơi gây nhầm lẫn khi đề nghị đưa họ đến đó. Tuy nhiên họ không làm tổn thương. – hakre

0

trong khi tôi thấy không có gì sai trong đó. cách khác vòng là làm một cái gì đó như thế này.

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

Giá trị của $result_row có lẽ được thiết lập để điều kiện Boolean liệu mysql_fetch_assoc($query) lợi nhuận một cái gì đó thật-ish và $s nhỏ hơn 5. Vì vậy, cố gắng đọc $result_row như một cuốn từ điển không còn hoạt động.

Bạn có thể sử dụng dấu ngoặc để xác định chính xác có bao điều được phân tích cú pháp:

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

Bằng cách này, $result_row được thiết lập để mysql_fetch_assoc($query), đó là những gì bạn muốn, vòng lặp tiếp tục miễn là giá trị logic của nhiệm vụ đó trả về một cái gì đó đúng-ish, cũng như s nhỏ hơn 5.

Các vấn đề liên quan