2012-08-15 18 views
7

È possibile scrivere più condizioni in un ciclo while? In caso contrario, qual è un'alternativa? L'ho provato ed è stato restituito con un errore relativo alla riga di codice che imposta le condizioni per il ciclo while. Ecco un esempio di cosa intendo.While Loop e condizioni multiple

$s = 1; 

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

Certo che è possibile. Hai provato? L'intera condizione 'while', sebbene molti componenti possa avere, deve essere valutata su VERO o FALSO. Questo è l'unico requisito. Prestare attenzione quando si fa un incarico in una dichiarazione composta come quella, anche se ... '$ result_row' potrebbe non ottenere ciò che si aspetta a causa della precedenza degli operatori. –

+1

La tua logica è corretta. Che cosa dice esattamente l'errore? –

+1

Assolutamente è possibile proprio come qualsiasi altra struttura di controllo. Deve solo valutare il vero o il falso. – j08691

risposta

22

ciò che è possibile, ma perché = ha una minore precedence di && è necessario parentesi per garantire che la sua dichiarazione viene interpretata correttamente:

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

Le parentesi attorno $s < 5 non sono necessari qui, ma io' li ho inclusi per chiarezza.

Tuttavia sarebbe più semplice modificare la query per restituire solo 5 righe, aggiungendo LIMIT 5.

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

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

+0

La precedenza collegata non richiede la seconda coppia interna di parentesi qui, quindi sembra un po 'fuorviante suggerire di metterli lì. Comunque non fanno male. – hakre

0

mentre vedo nulla di sbagliato in questo. viceversa è fare qualcosa di simile.

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

Il valore di $result_row viene probabilmente impostato la condizione booleana se mysql_fetch_assoc($query) rendimenti qualcosa di vero-ish e $s è inferiore a 5. Quindi, cercare di leggere $result_row come un dizionario non funziona più.

È possibile utilizzare le parentesi per specificare esattamente come le cose vengono analizzati:

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

In questo modo, $result_row viene impostato su mysql_fetch_assoc($query), che è ciò che si vuole, e il ciclo continua fino a quando il valore logico di tale incarico restituisce qualcosa di vero-ish, così come s è inferiore a 5.