kirby
kirby

Reputation: 4041

While loop not working as expected with variable

The following code works fine when i remove the && $f<4, but with it in, it doesn't work.

PHP:

$titles=array();
$f=0;
while ($row=mysql_fetch_assoc($query) && $f<4){  //this line doesn't work
        $titles[]=$row['questiontitle'];
            echo "<div class='questionPreview'>$titles[$f]</div>";
            $f++;
        }

Upvotes: 1

Views: 176

Answers (3)

lonesomeday
lonesomeday

Reputation: 237847

=has lower precedence than&&. This means that the && operator is evaluated first.

This means that your code, in effect, looks like this:

while ($row = (mysql_fetch_assoc($query) && $f<4)){  //this line doesn't work

So, in other words, do the MySQL query and the comparison, and if they are both true, set $row to true; otherwise, set it to false.

You need to use brackets to ensure that the right operations are done:

while (($row=mysql_fetch_assoc($query)) && ($f<4)){

Upvotes: 2

Wrikken
Wrikken

Reputation: 70460

That is probably because $row is true rather then the array:

$ php -r 'var_dump($row = pow(2,2) && true,$row);'
bool(true)
bool(true)
$ php -r 'var_dump($row = pow(2,2) && false,$row);'
bool(false)
bool(false)

(pow being a random function here)

That is because && has a higher precedence then =. As always, solve with ():

while ( ($row = mysql_fetch_assoc($query) ) && $f<4){

Upvotes: 1

Mel Stanley
Mel Stanley

Reputation: 374

If I interpret you correctly I think you are having a precedence problem. Try this:

while (($row=mysql_fetch_assoc($query)) && ($f<4)){

Upvotes: 5

Related Questions