ryanfc Posted August 17, 2007 Share Posted August 17, 2007 I am creating a directory of businesses for a web site. There are 8 main categories (dining, bars, entertainment, etc) and when a user clicks on a category it takes them to a page that lists all the businesses (and phone numbers) in that category in alphabetical order. The problem I have is that it does so in one big long column. Can anyone help me alter the code to display the results in 3 columns? I do want to keep them in alphabetical order, however if that is straight across or down does, it does not really matter to me. And I am fine with losing the Character (A, B, C, etc) header above each set if needed. Thank you for your help. Here is the code currently: <?php while ($info = mysql_fetch_array( $data )) { // get the first letter of the name. let's convert // it to uppercase to make sure that 'A' and 'a' get // put into the same group. $letter = strtoupper(substr($info['name'],0,1)); // now we will check to see if the first letter of the // current name is the same as the first letter of the // previous name. If it is not, then we make a new // group 'header' with the letter. Since there is no // previous row on the first pass, we will automatically // have an underlined 'A' made (or whatever your list starts with) if ($letter != $prev_row) { echo "<br><u>$letter</u><br>"; } // end if // here we just echo out the name echo "{$info['name']} <br>"; Print "Phone: ". $info['phone'] . "<br />"; // and here we assign the current letter to $prev_row so // that on the next iteration of the loop, we will have // a previous row letter to compare $prev_row = $letter; } // end while ?> Link to comment https://forums.phpfreaks.com/topic/65441-solved-putting-results-into-columns/ Share on other sites More sharing options...
lemmin Posted August 17, 2007 Share Posted August 17, 2007 $i=0; echo "<table><tr><td>"; while ($info = mysql_fetch_array( $data )) { $letter = strtoupper(substr($info['name'],0,1)); if ($letter != $prev_row) { echo "<br><u>$letter</u><br>"; } echo "{$info['name']} <br>"; if ($i % 50 == 0) echo "<td>" Print "Phone: ". $info['phone'] . "<br />"; $prev_row = $letter; $i++; } echo "</table> That should make a new column every 50 results. Your code is all in there, I just took out the comments to make it smaller. Also, You don't need to use substr to get one character. A string is just an array of chars so this code: $letter = strtoupper(substr($info['name'],0,1)); is the same as: $letter = $info['name'][0]); Even tighter: if ($info['name'][0] != $prev_row) { echo "<br><u>$letter</u><br>"; } Link to comment https://forums.phpfreaks.com/topic/65441-solved-putting-results-into-columns/#findComment-326796 Share on other sites More sharing options...
ryanfc Posted August 17, 2007 Author Share Posted August 17, 2007 ok i now have: <?php $i=0; echo "<table><tr><td>"; while ($info = mysql_fetch_array( $data )) { $letter = strtoupper(substr($info['name'],0,1)); if ($letter != $prev_row) { echo "<br><u>$letter</u><br>"; } echo "{$info['name']} <br>"; if ($i % 50 == 0) echo "<td>" Print "Phone: " . $info['phone'] . "<br />"; $prev_row = $letter; $i++; } echo "</table>"; ?> but i am getting this error: Parse error: syntax error, unexpected T_PRINT, expecting ',' or ';' in /home/myevvspa/public_html/client_list.php on line 62 line 62 is: Print "Phone: " . $info['phone'] . "<br />"; Link to comment https://forums.phpfreaks.com/topic/65441-solved-putting-results-into-columns/#findComment-326811 Share on other sites More sharing options...
ryanfc Posted August 17, 2007 Author Share Posted August 17, 2007 messed with the code a bit to make it read as this: <?php $i=0; echo "<table border=1><tr><td>"; while ($info = mysql_fetch_array( $data )) { $letter = strtoupper(substr($info['name'],0,1)); echo "{$info['name']} <br>"; if ($i % 50 == 0); echo "{$info['phone']}"; echo "<td>"; $prev_row = $letter; $i++; } echo "</td></tr></table>"; ?> and it is basically doing what I want it to do. Currently I only have 2 businesses in the database for testing purposes, and each one is going into its on cell. However, next to the second cell is a third empty cell. How do I get rid of that? On a side note: If I decide I want them listed down instead of across, but still have 3 columns, is there a way to alter the code to do that? Link to comment https://forums.phpfreaks.com/topic/65441-solved-putting-results-into-columns/#findComment-326825 Share on other sites More sharing options...
sasa Posted August 17, 2007 Share Posted August 17, 2007 try <?php mysql_connect('localhost'); mysql_select_db('test'); $data = mysql_query('select * from names order by name'); $prev_row =''; echo '<table border ="3">'; while($info = mysql_fetch_array( $data )) { $letter = strtoupper(substr($info['name'],0,1)); if ($letter != $prev_row) { if($count % 3) { for ($i = ($count % 3); $i < 3; $i++) echo '<td> </td>'; echo '</tr>'; $count =0; } $prev_row = $letter; echo '<tr><td colspan="3">',$letter,'</td></tr>'; } if ($count % 3 == 0) echo '<tr>'; $count++; echo '<td>', $info['name'], '<br />Phone: ', $info['phone'], "</td>\n"; if ($count % 3 == 0) echo '</tr>'; } if($count % 3) { for ($i = ($count % 3); $i < 3; $i++) echo '<td> </td>'; echo '</tr>'; } echo '</table>'; ?> Link to comment https://forums.phpfreaks.com/topic/65441-solved-putting-results-into-columns/#findComment-326919 Share on other sites More sharing options...
ryanfc Posted August 17, 2007 Author Share Posted August 17, 2007 VERY NICE! Link to comment https://forums.phpfreaks.com/topic/65441-solved-putting-results-into-columns/#findComment-326927 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.