Loop over each item in a sequence or a mapping. For example, to display a list
of users provided in a variable called
users
:
<h1>Members</h1>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
A sequence or a mapping can be either an array or an object implementing
the Traversable
interface.
If you do need to iterate over a sequence of numbers, you can use the ..
operator:
{% for i in 0..10 %}
* {{ i }}
{% endfor %}
The above snippet of code would print all numbers from 0 to 10.
It can be also useful with letters:
{% for letter in 'a'..'z' %}
* {{ letter }}
{% endfor %}
The ..
operator can take any expression at both sides:
{% for letter in 'a'|upper..'z'|upper %}
* {{ letter }}
{% endfor %}
If you need a step different from 1, you can use the range
function
instead.
Inside of a for
loop block you can access some special variables:
The loop.length
, loop.revindex
, loop.revindex0
, and
loop.last
variables are only available for PHP arrays, or objects that
implement the Countable
interface.
If no iteration took place because the sequence was empty, you can render a
replacement block by using else
:
{% for user in users %}
<li>{{ user.username|e }}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
By default, a loop iterates over the values of the sequence. You can iterate
on keys by using the keys
filter:
<h1>Members</h1>
{% for key in users|keys %}
<li>{{ key }}</li>
{% endfor %}
You might want to iterate over a subset of values. This can be achieved using
the slice filter:
<h1>Top Ten Members</h1>
{% for user in users|slice(0, 10) %}
<li>{{ user.username|e }}</li>
{% endfor %}