我试图将表格单元格的打印限制为每行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>";
我不明白为什么这不起作用!我真的很感谢对此事的支持:)
答案 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_box
和kitchen_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>";