Как бы вы сделали два столбика с веточкой?

Я не могу для жизни понять, как добавить </tr><tr> каждую ДРУГОЙ итерации в петле Twig.

Например:

 $numArray = array(12,13,14,15,16,17,18); 

Перейдя к ветке, я бы зацикливал таблицу, как:

 <table> {% for num in numArray %} <tr> <td> {{num}} </td> </tr> {% endfor %} </table> 

Это приведет к выводу:

 +-----------+ | 12 | +-----------+ | 13 | +-----------+ | 14 | +-----------+ | 15 | +-----------+ | 16 | +-----------+ | 17 | +-----------+ | 18 | +-----------+ 

Я бы хотел сделать что-то вроде этого:

 +-----------+-----------+ | 12 | 13 | +-----------+-----------+ | 14 | 15 | +-----------+-----------+ | 16 | 17 | +-----------+-----------+ | 18 | | +-----------+-----------+ 

Но я не могу, чтобы жизнь меня определяла способ чередовать ввод строки со всем, что не кажется взломанным. Честно говоря, я не могу даже взломать работу. Есть ли способ для этого? Или, должен ли я искать собственное расширение?

Правильный способ сделать это – использовать пакетный фильтр. Это новое в 1.12.3.

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

Ссылка: http://twig.sensiolabs.org/doc/filters/batch.html

Что-то вроде этого будет работать:

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

Альтернативный способ, который выглядит намного менее взломанным:

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

Для этого конкретного случая вы можете подготовить свой массив раньше. Таким образом, в цикле вы будете иметь в каждой строке две переменные. Попробуйте первый пример с этого сайта http://twig.sensiolabs.org/doc/templates.html