0

我试图将表格单元格的打印限制为每行 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>";

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

4

2 回答 2

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_divDIV 标签都将具有相同的 ID。如果您希望 CSS 使用此功能,请使用类。否则,您可以尝试将 $i 的值添加到每个 ID。

根据要求挑剔:

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

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

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

否则代码对我来说似乎很好。

于 2013-04-19T08:01:51.570 回答
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>";
于 2013-04-19T08:02:38.193 回答