tomfmason Posted September 8, 2006 Share Posted September 8, 2006 I have a query that will retrieve a product from disription from my db. Well I am wanting to use a counter and if $i is even then I will use one lay out and if it is odd I will use another.here is a simple example of my code[code=php:0]$i = 0;while ($rw = mysql_fetch_assoc($sql)) { if ($i == "I need something that means an even number") { $class = "startRight"; }else{ $class = "startLeft"; } //now I finish displaying the results}[/code]Any suggestions would be great.Thanks,Tom Quote Link to comment Share on other sites More sharing options...
.josh Posted September 8, 2006 Share Posted September 8, 2006 $class = ($i % 2 == 0) ? "startRight" : "startLeft"; Quote Link to comment Share on other sites More sharing options...
tomfmason Posted September 8, 2006 Author Share Posted September 8, 2006 Will that work?? I am going to display 10 results per page. I guess I could create an even array then use in_array. But I thought that there might be a better way.Thanks,Tom Quote Link to comment Share on other sites More sharing options...
.josh Posted September 8, 2006 Share Posted September 8, 2006 a "better" way? I don't think it gets better than that...that's just a shorthand version of what you were trying to do. you could have done it like this:[code]$i = 0;while ($rw = mysql_fetch_assoc($sql)) { if ($i % 2 == 0) { $class = "startRight"; }else{ $class = "startLeft"; } //now I finish displaying the results}[/code]however, i don't see anything in your code that increments $i ...what is $i supposed to be? Quote Link to comment Share on other sites More sharing options...
tomfmason Posted September 8, 2006 Author Share Posted September 8, 2006 I forgot to add $i++; in my example.$i is counting the number of times that the loop is processed. Which will be ten times. So if I go with your code then on the 4th time then wont it start on the left instead of the right? Or am I missing your point completly??Thanks for the Help,Tom Quote Link to comment Share on other sites More sharing options...
.josh Posted September 8, 2006 Share Posted September 8, 2006 okay the point of the ($i % 2 == 0) is that the % operator is the modulus operator. it takes $i and divides it by 2 and gives the remainder. if there is no remainder, then the number must be even. So in your if..else.. statement, it does just that, assigning 'startRight' to $class if there is no remainder (therefore the condition is true because it would equal 0), but if it is not, then it assigns 'startLeft' to $class instead. my one line piece of code is simply a shorthand way of doing your if..else statement, with the exact same condition. it's called a ternary operator. Both of these do the same thing:[code]$i = 0;while ($rw = mysql_fetch_assoc($sql)) { if ($i % 2 == 0) { $class = "startRight"; }else{ $class = "startLeft"; } //now I finish displaying the results $i++;}[/code]does the same as this:[code]$i = 0;while ($rw = mysql_fetch_assoc($sql)) { $class = ($i % 2 == 0) ? "startRight" : "startLeft"; // now i finish displaying the results $i++;}[/code]basically that line of code says this: if the part in the ( ) is true, then assign the value on the left side of the colon to $class. If it is false, then assign the value to the right side of the colon. Quote Link to comment Share on other sites More sharing options...
tomfmason Posted September 8, 2006 Author Share Posted September 8, 2006 Thank you very much. That was very informative. I also googled it and found several other methods.Thanks again,Tom Quote Link to comment Share on other sites More sharing options...
.josh Posted September 8, 2006 Share Posted September 8, 2006 Oh and to answer this:[quote author=tomfmason link=topic=107313.msg430342#msg430342 date=1157691771] So if I go with your code then on the 4th time then wont it start on the left instead of the right? Or am I missing your point completly??[/quote]no. if you do $i++ it will alternate between assigning left and right to $class. each time $i is incremented, it divides that number by 2 and compares the remainder to 0. 0 / 2 = 0 no remainder:even.1 / 2 = 0 remainder .5: odd.2 / 2 = 1 no remainder: even.3 / 2 = 1 remainder 1: odd.4 / 2 = 2 no remainder: even. 5 / 2 = 2 remainder 1: odd. 6 / 2 = 3 no remainder: even.7 / 2 = 3 remainder 1: odd.8 / 2 = 4 no remainder: even.9 / 2 = 4 remainder 1: odd.10 / 2 = 5 no remainder: even.get it? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.