Hi,
I'm assuming from your post that you want three columns of towns to make the table more compact.
First, you need to work out how many towns there are, using
$num_towns = mysql_num_rows($my_query_result);
[are you using mysql?].
Then divide the number of towns by three, and round up to the nearest integer. Use three separate loops to create three tables within one "outer" table (for alphabetically down, then across).
OR
Use on loop that uses three <td>$town</td> per row for alphabetically across, then down. In this second option, you'll need to move the result array pointer between each instance of $town.
DO NOT FORGET to detect if the result array is empty in your loop. Not all lists will divide by three evenly so you'll need to put in a few <td> </TD> items to fill out the remainder of the table.
Netscape is particularly sensitive to tables that "don't add up" if you forget the remainder table cells.
Hope this helps.
Cheers,
Duncan.