2012-08-15 26 views
7

Czy można zapisać wiele warunków w pętli while? Jeśli nie, jaka jest alternatywa? Próbowałem go i został zwrócony z błędem odnoszącym się do linii kodu, która ustawia warunki dla pętli while. Oto przykład tego, co mam na myśli.Podczas pętli i wielu warunków

$s = 1; 

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

Oczywiście, że to możliwe. Spróbowałeś? Cały warunek 'while', jakkolwiek wiele składników może mieć, musi być oceniony jako PRAWDA lub FAŁSZ. To jedyny wymóg. Zachowaj ostrożność podczas wykonywania przypisania w złożonej instrukcji, jednak ... '$ result_row' może nie osiągnąć tego, czego oczekujesz ze względu na pierwszeństwo operatora. –

+1

Twoja logika jest poprawna. Co dokładnie mówi błąd? –

+1

Absolutnie jest to możliwe, tak jak każda inna struktura kontrolna. Musi jedynie ocenić jako prawda lub fałsz. – j08691

Odpowiedz

22

To jest możliwe, ale ponieważ = ma niższy precedence niż && trzeba nawiasy, aby upewnić się, że oświadczenie jest interpretowane poprawnie:

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

Nawiasy wokół $s < 5 nie są wymagane tutaj, ale jestem włączyłem je dla jasności.

Jednak łatwiej byłoby zmodyfikować zapytanie i zwrócić tylko 5 wierszy, dodając LIMIT 5.

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

Jeszcze lepiej: [mysqli_stmt_num_rows()] (http://www.php.net/manual/en/mysqli-stmt.num-rows.php) – ghoti

+0

Połączony precedencja nie wymaga tutaj drugiej wewnętrznej pary nawiasów, więc wydaje się nieco mylące sugerowanie ich umieszczania. Jednak nie boli. – hakre

0

natomiast widzę nic złego w tym. na odwrót to zrobić coś takiego.

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

Wartość $result_row prawdopodobnie jest ustawiony w stan logicznej czy mysql_fetch_assoc($query) powraca coś true-owski i $s jest mniejsza niż 5. Więc próbuje odczytać $result_row jako słownikiem już nie działa.

Można użyć nawiasów, aby dokładnie określić, jak rzeczy się analizowany:

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

ten sposób $result_row zostanie ustawiony na mysql_fetch_assoc($query), czyli to, co chcesz, i pętla trwa tak długo, jak wartość logiczną tego przypisania zwraca coś true-ish, a także s jest mniejszy niż 5.

Powiązane problemy