Twig のfor文の使い方と簡単な実例を紹介したいと思います。
forによるループ文は、使いどころが多いと思います。
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にありました。
これと同じくらいブログでまとめられたらと思います。