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にありました。
これと同じくらいブログでまとめられたらと思います。