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

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?