Twig Components / Methods / for
for
is a Twig tag to loop over each item in a sequence. For example, to display a list of users provided in a variable called users:
<h1>Members</h1>
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
Note¶
A sequence 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.
The loop
variable
Inside of a for loop block you can access some special variables:
Variable | Description |
---|---|
loop.index | The current iteration of the loop. (1 indexed) |
loop.index0 | The current iteration of the loop. (0 indexed) |
loop.revindex | The number of iterations from the end of the loop (1 indexed) |
loop.revindex0 | The number of iterations from the end of the loop (0 indexed) |
loop.first | True if first iteration |
loop.last | True if last iteration |
loop.length | The number of items in the sequence |
loop.parent | The parent context |
{% for user in users %}
{{ loop.index }} - {{ user.username }}
{% endfor %}
Note¶
The loop.length, loop.revindex, loop.revindex0, and loop.last variables are only available for PHP arrays, or objects that implement the Countable interface.
The else
Clause¶
If no iteration took place because the sequence was empty, you can render a replacement block by using else:
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
</ul>
Iterating over Keys¶
By default, a loop iterates over the values of the sequence. You can iterate on keys by using the keys filter:
<h1>Members</h1>
<ul>
{% for key in users|keys %}
<li>{{ key }}</li>
{% endfor %}
</ul>
Iterating over Keys and Values¶
You can also access both keys and values:
<h1>Members</h1>
<ul>
{% for key, user in users %}
<li>{{ key }}: {{ user.username|e }}</li>
{% endfor %}
</ul>
Iterating over a Subset¶
You might want to iterate over a subset of values. This can be achieved using the slice filter:
<h1>Top Ten Members</h1>
<ul>
{% for user in users|slice(0, 10) %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
Source: Twig
Couldn't find what you were looking for? We are happy to help you in the forum, on Slack or on Github.