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

时间:2013-04-19 07:51:30

标签: php html

我试图将表格单元格的打印限制为每行3个。这在一个示例中起作用,但当我尝试在站点中的其他位置使用相同的代码时,显然无效。这是代码:

$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>";

我不明白为什么这不起作用!我真的很感谢对此事的支持:)

2 个答案:

答案 0 :(得分:2)

您的代码存在一些问题。但是你的主要问题是你使用的是基于零的增量,而是进行基于1的检查。因此,$i!=0 && $i%$n==0的结果表格如下:

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

所以,你看,结果会关闭第四个而不是第三个单元格之后的行。要解决此问题,请将行更改为:

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

您还应该在结束</tr>标记中添加结束</table>标记。

顺便说一句,您不应该为页面上的多个元素提供相同的ID。您的每个kitchen_boxkitchen_box_div DIV代码都具有相同的ID。如果你想要这个用于CSS,请使用类。否则,您可以尝试将$ i的值添加到每个ID。

根据要求挑选:

$temp = array();似乎有点无意义,特别是因为你不希望$ temp成为一个数组,而是一个对象。

else{ echo ""; }行也是多余的。

您现在不需要if($i != 0)检查,因为该案例将不再通过下一个测试。

否则代码对我来说似乎没问题。

答案 1 :(得分:0)

我认为问题是你的$ i从零开始。

让我们在创建新行之前查看您的条件:

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

如果$ i = 0,则第一个条件不匹配。然后第二个不是$ i = 1和$ i = 2.然后你的脚本在你的第一行创建了另一个......然后第一次匹配你的if条件。

我想你可以在for指令开始之后立即移动这部分代码:

            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>";