Smarty foreachのプロパティ
index、iteration、first、last、show、total
Smarty
{* ループの回数 0から数えた値 0,1,2,... *}
{foreach $arrFrom as $arrVal}
{$arrVal@index}
{/foreach}
使用例
PHP
$arrFrom = array('foo', 'baz', 'bar', 'qux', 'quux');
$view->assign('arrFrom', $arrFrom);
0
1
2
3
4
Smarty
{* ループの回数 1から数えた値 1,2,3,... *}
{foreach $arrFrom as $arrVal}
{$arrVal@iteration}
{/foreach}
1
2
3
4
5
continueで処理がスキップするとループ回数もスキップされる。カウンタ代わりにindexやiteration使用できないのでcounterを使用する。
Smarty
{* カウンタ *}
{counter assign=i start=1 skip=1 print=false}
{foreach $arrFrom as $arrVal}
{if $arrVal eq 'baz' or $arrVal eq 'qux'}
{continue}
{/if}
iteration:{$arrVal@iteration}
counter:{$i}
{counter}
{/foreach}
iteration:1
counter:1
iteration:3
counter:2
iteration:5
counter:3
Smarty
{* ループの総数、カウント = count($arrFrom) *}
{foreach $arrFrom as $arrVal}
{$arrVal@total}
{/foreach}
5
Smarty
{* ループが最初のときTRUE *}
{foreach $arrFrom as $arrKey => $arrVal}
{$arrKey}
{if $arrVal@first}
最初のみの処理...
{/if}
{if ! $arrVal@first}
最初以外の処理...
{/if}
{/foreach}
0 最初のみの処理...
1 最初以外の処理...
2 最初以外の処理...
3 最初以外の処理...
4 最初以外の処理...
Smarty
{* ループが最後のときTRUE *}
{foreach $arrFrom as $arrKey => $arrVal}
{$arrKey}
{if $arrVal@last}
最後のみの処理...
{/if}
{if ! $arrVal@last}
最後以外の処理...
{/if}
{/foreach}
0 最後以外の処理...
1 最後以外の処理...
2 最後以外の処理...
3 最後以外の処理...
4 最後のみの処理...
Smarty
{foreach $arrFrom as $arrVal}
...
{/foreach}
{if $arrVal@show}
配列が空でない場合の処理...
{/if}
※foreachの記述について
smarty2: {foreach from=$arrFrom key=arrKey item=arrItem name=arrName}
smarty3: {foreach $arrFrom as $arrKey => $arrVal}