Php Smarty,每4次迭代一行

Php Smarty,每4次迭代一行,php,foreach,html-table,smarty,counter,Php,Foreach,Html Table,Smarty,Counter,我如何在Smarty中设置循环中每4次迭代,我就会在表中得到新行? 我正在尝试这样的事情: <table> {foreach $arr as $v} {counter start=0} {if $counter/4 == 0} <tr><td>{$v}</td></tr> {else} <td>{$v}</td>

我如何在Smarty中设置循环中每4次迭代,我就会在表中得到新行? 我正在尝试这样的事情:

<table>
    {foreach $arr as $v}
       {counter start=0}
       {if $counter/4 == 0}
           <tr><td>{$v}</td></tr>
       {else}
           <td>{$v}</td>
       {/if}
       <td>
    {/foreach}
</table>

{foreach$arr作为$v}
{计数器开始=0}
{如果$counter/4==0}
{$v}
{else}
{$v}
{/if}
{/foreach}

但我明白这是愚蠢的,我被卡住了,有正常的方法吗?

如果没有数据,你可以在空行中生活,那么使用以下方法:

{assign var="counter" value="0"}
<table>
    <tr>
    {foreach $arr as $v}
       {assign var="counter" value=$counter + 1}
       {if $counter % 4 == 0}
           </tr><tr>
       {/if}
       <td>{$v}</td>
    {/foreach}
    </tr>
</table>
{assign var=“counter”value=“0”}
{foreach$arr作为$v}
{assign var=“counter”value=$counter+1}
{如果$counter%4==0}
{/if}
{$v}
{/foreach}
如果您不能接受这种情况,则需要在呈现表之前检查是否有可用的数据


仍然需要说明的是,
$arr
的计数必须是
4
的倍数。否则,需要正确设置
columnspan
属性。

这将是Smarty 3解决方案,适用于任意数量的列,无空行,并在必要时添加最后一个带有colspan值的空单元格:

   <table>
        <tr>
    {$cols=4}
    {foreach $arr as $v}
        <td>{$v}</td>
        {if !$v@last AND $v@iteration is div by $cols}
            </tr><tr>
        {/if}
        {if $v@last AND $v@iteration is not div by $cols}
            <td colspan="{$cols-$v@iteration%$cols}"></td>
        {/if}
     {foreachelse}
           <td colspan="{$cols}">No data</td>    
     {/foreach}
        </tr>
    </table>

{$cols=4}
{foreach$arr作为$v}
{$v}
{如果$v@last及$v@iteration是div除以$cols}
{/if}
{如果$v@last及$v@iteration不是被$cols}div
{/if}
{foreachelse}
没有数据
{/foreach}

Foreach不带传统计数器变量且不带空行

<table>
<tr>
    {foreach from=$aArray item=sValue name=tags_foreach}
    {if $smarty.foreach.tags_foreach.index != 0 AND $smarty.foreach.tags_foreach.index mod 4 == 0}
        </tr><tr>
    {/if}

    <td>
        {$sValue}
    </td>
    {/foreach}
</tr>

{foreach from=$aArray item=sValue name=tags\u foreach}
{如果$smarty.foreach.tags\u foreach.index!=0和$smarty.foreach.tags\u foreach.index mod 4==0}
{/if}
{$sValue}
{/foreach}

请尝试
$counter%4==0
,因为
$counter/4
是除法运算符。所以它不会给你零。要检查可分性,请始终使用
%
是否要在每四个单元格添加一行?是的,每四个单元格添加一行。像OOOOOOOO,但新行上的每个“OOOO”。您可能应该使用模%,而不是除法/是的,当然。完全没能取代这个:)+1你比我跑得快。我键入是为了发布此解决方案。谢谢,但它不起作用,我收到错误,键入
未定义索引:counter in
,我写了
$counter/4
,只是举个例子,我不知道是否可以这样检查。使用“立即分配”可以工作,谢谢,但他们在每行之后都写
,他们没有检查
$counter%4==0