表打印一个单元而不是新行

I am trying to limit the printing of table cells to 3 per row. This worked in one example, but clearly not working when I tried to use the same code somewhere else in the site. This is the code:

$n=3;
                echo "<table cellpadding='10' cellspacing='10' style='margin-right:-70px;'><tr>"; 
                $users_count = count($users);

                for($i=0; $i<$users_count;$i++)
                {
                    $temp = array();
                    $temp = $users[$i];
                    echo "<td>";
                    echo "<div id='kitchen_box'>";

                        echo "<div id='kitchen_box_details'>";
                            echo "<h4>".$temp->fullname . "</h4><br>";
                            if(strcmp($temp->address, '') == 0)
                                echo $temp->city;
                            else
                                echo $temp->address.", ".$temp->city;
                        echo "</div>";      
                            echo "<div id='kitchen_box_pic'><img id='kitchen_image' src='".$temp->profilepic."' /></div>";
                    echo "</div>";
                    echo "</td>";

                    if($i != 0){
                        if($i % $n == 0 && $i != $users_count-1){
                            echo "</tr><tr>";
                        }
                        else{
                            echo ""; //if it is the last in the loop - do not echo
                        }
                    }
                }
                echo "</table>";

I can't see why this wouldn't work! I would really appreciate support on the matter :)

There are several issues with your code. But your main issue is that you're using a zero-based increment, but doing a 1-based check. So, a table of your the results of an $i!=0 && $i%$n==0 goes like this:

$i    $result
0    false
1    false
2    false
3    true

So, you see, the result closes the row after the fourth, not the third cell. To fix this, change the line to:

if($i % $n == $n-1 && $i != $users_count-1){

You should also include a closing </tr> tag with your closing </table> tag.

Incidentally, you shouldn't give the same ID to multiple elements on a page. Each of your kitchen_box and kitchen_box_div DIV tags will have the same ID. If you want this for CSS, use classes. Otherwise, you might try adding the value of $i to each ID.

Nitpicking on request:

The line $temp = array(); seems a little pointless, especially since you don't want $temp to be an array, but an object.

The else{ echo ""; } lines are also redundant.

You don't need the if($i != 0) check now because that case will not pass the next test anymore.

Otherwise the code seems fine to me.

I think the problem is that your $i starts at zero.

Let's look at your conditions before creating a new row :

if($i != 0){
                    if($i % $n == 0 && $i != $users_count-1)

If $i = 0, the first condition isn't matched. Then the second isn't for $i = 1 and $i = 2. And then your script creates another ... in your first row before matching your if conditions for the first time.

I guess you could move this part of the code right after the beginning of the for instructions :

            for($i=0; $i<$users_count;$i++)
            {
                if($i != 0)
                {
                    if($i % $n == 0 && $i != $users_count-1){
                        echo "</tr><tr>";
                    }
                    else{
                        echo ""; //if it is the last in the loop - do not echo
                    }
                }

                // Echo your <td> ... </td>
            }
            echo "</tr></table>";