Solved

# if there is only one row, I want it to be on the second row

Posted on 2011-02-22
161 Views
if \$x<=4 do one row
if \$x<=8 && \$x>=5 two rows
if \$x>=9 && \$x<=14 three rows

I need to do

<table>
<tr>
<td>

and I want the items to evenly distributed
with the number of items per row being important

x can be any value 1-14

these are examples:
if \$x==5
3 items on first row
2 items on second row

if \$x==7
4 items on first row
3 items on second row

if \$x==9
3 items on first row
3 items on second row
3 items on third row

if \$x== 14
5
5
4
is what I want

the code is correct
but if there is only one row, I want it to be on the second row
so I want either a linebreak or an empty first row
``````<table border="1">
<?php

\$x = array('1','2','3','4','5','6','7','8','9','10','11','12');

// count the items in an array
\$num = count(\$x);
switch(\$num){
case 1: \$numrows = 1; break;
case 2: \$numrows = 1; break;
case 3: \$numrows = 1; break;
case 4: \$numrows = 1; break;
case 5: \$numrows = 2; break;
case 6: \$numrows = 2; break;
case 7: \$numrows = 2; break;
case 8: \$numrows = 2; break;
}

// TO DO
// handling of more than 9 items
if(\$num >= 9) \$numrows = 3;

{
// how much items do we have left
\$itemsleft = \$num;
\$firstitem = 0;

for(\$i=\$numrows;\$i>0;\$i--){
echo"<tr><td>";

// first row items
\$numitems = ceil(\$itemsleft/\$i);
// substract the items
\$itemsleft = \$itemsleft - \$numitems;

for(\$j=\$firstitem;\$j<\$firstitem+\$numitems;\$j++)
echo"<img src=".\$x[\$j]." />";
\$firstitem = \$firstitem + \$numitems;

echo"</td></tr>";
}

}

?>
</table>
``````
0
Question by:rgb192
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 27

Accepted Solution

Lukasz Chmielewski earned 250 total points
ID: 34954832
Like this ?

``````<table border="1">
<?php

\$x = array('1','2','3','4','5','6','7','8','9','10','11','12');

// count the items in an array
\$num = count(\$x);
switch(\$num){
case 1: \$numrows = 1; break;
case 2: \$numrows = 1; break;
case 3: \$numrows = 1; break;
case 4: \$numrows = 1; break;
case 5: \$numrows = 2; break;
case 6: \$numrows = 2; break;
case 7: \$numrows = 2; break;
case 8: \$numrows = 2; break;
}

// TO DO
// handling of more than 9 items
if(\$num >= 9) \$numrows = 3;

{
// how much items do we have left
\$itemsleft = \$num;
\$firstitem = 0;

for(\$i=\$numrows;\$i>0;\$i--){
echo"<tr><td>";

if(\$numrows == 1) echo"<br />";

// first row items
\$numitems = ceil(\$itemsleft/\$i);
// substract the items
\$itemsleft = \$itemsleft - \$numitems;

for(\$j=\$firstitem;\$j<\$firstitem+\$numitems;\$j++)
echo"<img src=".\$x[\$j]." />";
\$firstitem = \$firstitem + \$numitems;

echo"</td></tr>";
}

}

?>
</table>
``````
0

LVL 11

Expert Comment

ID: 34956392
Try this:

``````<table border="1">
<?php
\$x = array('1','2','3','4');

// count the items in an array
\$num = count(\$x);

switch(\$num) {
case 1: \$numrows = 1; break;
case 2: \$numrows = 1; break;
case 3: \$numrows = 1; break;
case 4: \$numrows = 1; break;
case 5: \$numrows = 2; break;
case 6: \$numrows = 2; break;
case 7: \$numrows = 2; break;
case 8: \$numrows = 2; break;
}

// TO DO
// handling of more than 9 items
if(\$num >= 9) {
\$numrows = 3;
}

// how much items do we have left
\$itemsleft = \$num;
\$firstitem = 0;

for(\$i = \$numrows; \$i>0; \$i--) {
echo"<tr><td>";

if(\$numrows == 1) {
// insert space, close first row, and start second row
echo "&nbsp;</td></tr><tr><td>";
}

// first row of actual items
\$numitems = ceil(\$itemsleft/\$i);

// substract the items
\$itemsleft = \$itemsleft - \$numitems;

for(\$j = \$firstitem; \$j < \$firstitem+\$numitems; \$j++) {
echo"<img src=".\$x[\$j]." />";
}
\$firstitem = \$firstitem + \$numitems;

echo"</td></tr>";
}

?>
</table>
``````
0

LVL 11

Assisted Solution

Ovid Burke earned 250 total points
ID: 34960048
Hey,

I had shortened the array \$x to test for a small number of items. Here it is with all 12:
``````<table border="1">
<?php
\$x = array('1','2','3','4','5','6','7','8','9','10','11','12');

// count the items in an array
\$num = count(\$x);

switch(\$num) {
case 1: \$numrows = 1; break;
case 2: \$numrows = 1; break;
case 3: \$numrows = 1; break;
case 4: \$numrows = 1; break;
case 5: \$numrows = 2; break;
case 6: \$numrows = 2; break;
case 7: \$numrows = 2; break;
case 8: \$numrows = 2; break;
}

// TO DO
// handling of more than 9 items
if(\$num >= 9) {
\$numrows = 3;
}

// how much items do we have left
\$itemsleft = \$num;
\$firstitem = 0;

for(\$i = \$numrows; \$i>0; \$i--) {
echo"<tr><td>";

if(\$numrows == 1) {
// insert space, close first row, and start second row
echo "&nbsp;</td></tr><tr><td>";
}

// first row of actual items
\$numitems = ceil(\$itemsleft/\$i);

// substract the items
\$itemsleft = \$itemsleft - \$numitems;

for(\$j = \$firstitem; \$j < \$firstitem+\$numitems; \$j++) {
echo"<img src=".\$x[\$j]." />";
}
\$firstitem = \$firstitem + \$numitems;

echo"</td></tr>";
}

?>
</table>
``````
0

Author Closing Comment

ID: 34966053
thanks
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little mathsâ€¦
These days socially coordinated efforts have turned into a critical requirement for enterprises.
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
###### Suggested Courses
Course of the Month8 days, 11 hours left to enroll