你将如何制作一个带有树枝的两列表?

How*_*opa 19 php twig

我不能为我的生活弄清楚如何</tr><tr>在Twig循环中添加每个OTHER迭代.

例如:

$numArray = array(12,13,14,15,16,17,18);
Run Code Online (Sandbox Code Playgroud)

通过树枝,我会循环一个表,如:

<table>
  {% for num in numArray %}
    <tr>
      <td>
        {{num}}
      </td>
    </tr>
  {% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)

这将输出:

+-----------+
|    12     |
+-----------+
|    13     |
+-----------+
|    14     |
+-----------+
|    15     |
+-----------+
|    16     |
+-----------+
|    17     |
+-----------+
|    18     |
+-----------+
Run Code Online (Sandbox Code Playgroud)

我想做的是得到这样的东西:

+-----------+-----------+
|    12     |    13     |
+-----------+-----------+
|    14     |    15     |
+-----------+-----------+
|    16     |    17     |
+-----------+-----------+
|    18     |           |
+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)

但我不能为我的生活找到一种方法来交替我的行输入与任何看似不hacky的东西.老实说,我甚至无法上班.有这个方法吗?或者,我应该编写自己的扩展名吗?

Tob*_*olm 33

正确的方法是使用批量过滤器.它是1.12.3中的新功能.

<table>
{% for row in numArray|batch(2) %}
  <tr>
  {% for column in row %}
    <td>{{ column }}</td>
  {% endfor %}
  </tr>
{% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)

参考:http://twig.sensiolabs.org/doc/filters/batch.html


Mae*_*lyn 5

像这样的东西会起作用:

<table>
  <tr>
  {% for num in numArray %}
      <td>
        {{num}}
      </td>
  {% if loop.index is even %}
    </tr>
    <tr>
  {% endif %}
  {% endfor %}

  {% if num|length is odd %}
    <td></td>
  {% endif %} 
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

另一种方式,感觉更少hacky:

<table>
  {% for i in range(0, numArray|length-1, 2) %}
  <tr>
    <td>{{ numArray[i] }}</td>
    <td>{{ numArray[i+1]|default("") }}</td>
  </tr>
  {% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)

  • 更新:批处理过滤器已添加到Twig 1.12.3中.http://twig.sensiolabs.org/doc/filters/batch.html (2认同)