Alternate Table Rows

While upgrading my GIDTopsites™ Control Panel, I wanted to alternate the background color (or colour) to list the rows from multiple websites submitted by the members. Anyway, not surprisingly, there are quite a few ways to get that done.

Introducing ALTERNATE_BG.PHP

Below I have pasted the code I used to benchmark the 3 popular methods of alternating the background colour (or color, if you wanna get picky) to present a list.

To try this 'alternate table row colours' code out for yourself, all you have to do, is copy and paste the script in it's entirety and run it. All you have to do, is add or remove the first 2 // characters to disable or enable the particular method!

php:


<?php

//  Filename: ALTERNATE_BG.PHP
//  Does: Alternate table row colors
//  ==========================

//  some dummy data :)
for( $i=0; $i<10; $i++ )
{
  $array[] = mt_rand( 1, 10000 );
}

?>
<html>
<head>
<title>Testing alternate background code.</title>
<style type="text/css">
<!--
body, table { font:11px Verdana,Arial,Helvetica,sans-serif }
td.tdDark { background-color:#FCFCFC }
td.tdLight { background-color:#F6F6F6 }
td.tdDark, td.tdLight { padding:3px }
-->
</style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" width="300">
<?php

foreach( $array as $k=>$v )
{
  ///*  Using ARITHMETIC operator : %
  // (line above) remove // to disable
  // ---------------------------------
  $bgc = ( $k % 2 ? 'tdDark' : 'tdLight' );
  //*/

  /*  Using BITWISE operator: &
  // (line above) add // to enable
  // -----------------------------
  $bgc = ( $k & 1 ? 'tdDark' : 'tdLight' );
  //*/

  /*  Using a VALUE?
  // (line above) add // to enable
  // -----------------------------
  $bgc = ( $bgc==='tdLight' ? 'tdDark' : 'tdLight' );
  //*/

  echo '<tr><td class="'.$bgc.'">';
  printf( "%'03d. ", ++$k );
  echo 'Item No : '.$v."</td></tr>\n";
}

?>
</table>
</body>
</html>

Our sample table with alternate background colours

ALTERNATE_BG.PHP above outputs:

001. Item No : 9963
002. Item No : 4267
003. Item No : 7036
004. Item No : 4394
005. Item No : 2245
006. Item No : 2464
007. Item No : 6198
008. Item No : 7495
009. Item No : 4419
010. Item No : 8478

So, which is the most efficient method to use?

The good news is that all 3 methods run just as fast as the other. So, it just boils down to which you prefer or find more elegant, actually... When I added, an unlikely amount of rows to return, shockingly, using a simple value worked out to be just slightly faster then using an ARITHMETIC or BITWISE operator! Go figure...

TOP

How old are you?

 Teenager

 20 something

 30 something

 40 something

 Over 50