Skip to main content

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++;

}




Comments

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

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

    ReplyDelete
  2. =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)){

    ReplyDelete
  3. 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){

    ReplyDelete

Post a Comment

Popular posts from this blog

Wildcards in a hosts file

I want to setup my local development machine so that any requests for *.local are redirected to localhost . The idea is that as I develop multiple sites, I can just add vhosts to Apache called site1.local , site2.local etc, and have them all resolve to localhost , while Apache serves a different site accordingly.