[Twig]for文の使い方と簡単な実例紹介

Twig のfor文の使い方と簡単な実例を紹介したいと思います。
forによるループ文は、使いどころが多いと思います。

公式:for – Documentation

Twigでのfor文の使い方

基本的な使い方をまとめます。

{# sample array #}
{% set users = ['foo', 'bar'] %}

<ul>
    {% for user in users %}
        <li>{{ user }}</li>
    {% endfor %}
</ul>

{# result #}
<ul>
    <li>foo</li>
    <li>bar</li>
</ul>

一連の処理を一定数、反復処理したい場合は下記のように記述します。

{# use the .. operator #}
{% for i in 0..5 %}
    * {{ i }}<br>
{% endfor %}

{# result #}
* 0<br>
* 1<br>
* 2<br>
* 3<br>
* 4<br>
* 5<br>

数値だけでなくアルファベットなど文字でも可能です。

{% for letter in 'a'..'c' %}
    * {{ letter }}<br>
{% endfor %}

{# result #}
* a<br>
* b<br>
* c<br>

{# can use any expression #}
{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

式の中でTwigのexpressionを使用することもできます。上記例だと大文字AからZまで表示されます。
片側だけ付与することも可能です。

Twigでのfor文の使用例

indexの取得

一定数反復使用時はiなど指定していますが、それ以外の場合でもindexを取得できます。

{# use loop.index (1 indexed) #}
{% set users = ['foo', 'bar'] %}
<ul>
    {% for user in users %}
        <li>{{ loop.index }}-{{ user }}</li>
    {% endfor %}
</ul>

{# result #}
<ul>
    <li>1-foo</li>
    <li>2-bar</li>
</ul>

現在のループの反復数(iteration)を取得できます。「0」からスタートしたい場合はloop.index0を使用します。

ループの最初(最後)を判定する

{% set users = ['foo', 'bar', 'baz'] %}

{# use loop.first #}
{% for user in users %}
    {% if loop.first %}
        {{ user }}
    {% endif %}
{% endfor %}

{# result #}
foo

上記例は最初のループを判定しています。最後の場合はloop.lastを使います。
ループはそのほか
loop.length, loop.revindex, loop.revindex0, loop.parentなどが使用できます。

条件を追加して使用する

{% set users = [
    {
        'name': 'foo',
        'active': true
    },
    {
        'name': 'bar',
        'active': false
    },
    {
        'name': 'baz',
        'active': true
    }
] %}

{% for user in users if user.active %}
    {{ user.name }}<br>
{% endfor %}

{# result #}
foo
baz

上記例だと、activeのユーザ名だけを表示するように条件を追加しています。

配列からKEYとValueを両方とも取得する

{% set users = [
    {
        'name': 'foo',
        'active': true
    },
    {
        'name': 'bar',
        'active': false
    },
    {
        'name': 'baz',
        'active': true
    }
] %}

{% for key, user in users %}
    {{ key }}: {{ user.name }}<br>
{% endfor %}

{# result #}
0: foo
1: bar
2: baz

 
KeyとValueを取得したい場合は上記になります。

もともと数学が嫌いで文系だった私が、プログラムの勉強を始めたとき、配列とかforループとかforeachとかとても理解が難しかったのを覚えています。なので少し丁寧に解説してみました。
また、何かサンプルとなる使い方をしたときに追加していきます。

Twigおすすめの書籍

Twigだけに特化した書籍は読んだことがないのですが、AmazonのKindleにありました。
これと同じくらいブログでまとめられたらと思います。

テンプレートエンジンTwigを覚える本