Twig

灵活、快速且安全的
PHP 模板引擎

a Symfony Product
您正在阅读 Twig 3.x 的文档。切换到 Twig 1.x, 2.x 的文档。

问题 & 反馈

许可协议

Twig 文档 基于新的 BSD 许可协议 授权。

for

循环遍历序列或映射中的每个项目。例如,要显示在名为 users 的变量中提供的用户列表

1
2
3
4
5
6
<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

注意

序列或映射可以是数组或实现 Traversable 接口的对象。

如果确实需要遍历数字序列,可以使用 .. 运算符

1
2
3
{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

上面的代码片段将打印从 0 到 10 的所有数字。

它也可以用于字母

1
2
3
{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}

.. 运算符可以在两侧使用任何表达式

1
2
3
{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

提示

如果需要与 1 不同的步长,可以使用 range 函数代替。

loop 变量

for 循环块内,您可以访问一些特殊变量

变量 描述
loop.index 循环的当前迭代。(1 索引)
loop.index0 循环的当前迭代。(0 索引)
loop.revindex 从循环结束开始的迭代次数(1 索引)
loop.revindex0 从循环结束开始的迭代次数(0 索引)
loop.first 如果是第一次迭代,则为 True
loop.last 如果是最后一次迭代,则为 True
loop.length 序列中的项目数
loop.parent 父上下文
1
2
3
{% for user in users %}
    {{ loop.index }} - {{ user.username }}
{% endfor %}

注意

loop.lengthloop.revindexloop.revindex0loop.last 变量仅适用于 PHP 数组或实现 Countable 接口的对象。

else 子句

如果由于序列为空而未进行迭代,您可以使用 else 渲染替换块

1
2
3
4
5
6
7
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% else %}
        <li><em>no user found</em></li>
    {% endfor %}
</ul>

遍历键

默认情况下,循环遍历序列的值。您可以使用 keys 过滤器遍历键

1
2
3
4
5
6
<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

遍历键和值

您还可以访问键和值

1
2
3
4
5
6
<h1>Members</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

遍历子集

您可能想要遍历值的子集。这可以使用 slice 过滤器来实现

1
2
3
4
5
6
<h1>Top Ten Members</h1>
<ul>
    {% for user in users|slice(0, 10) %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

遍历字符串

要遍历字符串的字符,请使用 split 过滤器

1
2
3
4
5
6
<h1>Characters</h1>
<ul>
    {% for char in "諺 / ことわざ"|split('') -%}
        <li>{{ char }}</li>
    {%- endfor %}
</ul>