22940

[code]

    [2016] => Array
        (
            [0] => hoge
            [1] => fuga
        )
    
    [2015] => Array
        (
            [0] => hoge
            [1] => fuga
        )
    
[/code]

上記のような連想配列$rowsがあるとします。

これを{foreach}でキー(2016,2015)毎に実行したいのですが、  
2016,2015は別々に表示させたい。

[code]

    {foreach from=$rows[2016] item="row"}
      {$row}
    {/foreach}
    
    {foreach from=$rows[2015] item="row"}
      {$row}
    {/foreach}
    
[/code]

この2016(今年)と2015(去年)をうまく書くことはできないでしょうか。  
↓は2015の方がうまくいかない。

[code]

    {assign var="thisYear" value=$smarty.now|date_format:"%Y"}
    {foreach from=$rows[$thisYear] item="row"}
      {$row}
    {/foreach}
    
    {foreach from=$rows[$thisYear-1] item="row"}
      {$row}
    {/foreach}
    
[/code]

年くらいassignなしでやりたい  
↓は、まーエラーですよね。

[code]

    {foreach from=$rows[$smarty.now|date_format:"%Y"] item="row"}
      {$row}
    {/foreach}
    
[/code]

あまり綺麗とは言えないが、  
foreach をネストし、ifを使えば出来る。

[code]

    {foreach from=$rows key="year" item="row"}
      {if $year === $smarty.now|date_format:"%Y"}
        {foreach from=$row item="value"}
          {$value}
        {/foreach}
      {/if}
    {/foreach} 
    
    {foreach from=$rows key="year" item="row"}
      {if $year === $smarty.now|date_format:"%Y"-1}
        {foreach from=$row item="value"}
          {$value}
        {/foreach}
      {/if}
    {/foreach} 
    
[/code]

もう少しスマートに書けないでしょうか。  
初歩的なことかもしれませんがご教授お願いします。


CC BY-SA 3.0
2016-03-08T03:13:59.690
22910
2016-03-09T03:47:53.000
2016-03-09T03:47:53.000
14688
14688
question
smarty
Smartyでassignを使わずに{foreach}のfromにキー(年)を指定したい


$rows は 2016, 2015 で表示順になっているのですよね？  
単純に foreach をネストするのはどうでしょうか。

[code]

    {foreach from=$rows key="year" item="row"}
      {foreach from=$row item="value"}
        {$value|h}
      {/foreach}
    {/foreach}
    
[/code]


CC BY-SA 3.0
2016-03-09T01:32:03.587
22940
2016-03-09T01:32:03.587
14704
22910
answer