smartyでの多次元配列の扱い
検証モデル:
$rec = array ( array ("id" => "01" , "name" => "久保田" , "list" => "php,mysql,css") , array ("id" => "02", "name" => "山本" , "list" => "mt,css,design") , array ("id" => "03" , "name" => "立松" , "list" => "mt,css,dance") );
というデータがあったとします。 まず、これの、listの値をコンマで分けて配列に格納したい場合、
foreach ( $rec as $key => $value ) {
$rec[ $key ][ "list" ] = explode ("," , $value["list" ]);
}
という式で、listの中にさらに配列ができます。 ポイントは、$valueで配列を指定しているところです。 この場合、$valueには、arrayという値が入っているはずです。
このデータをテンプレートで出力する場合、まず、
$smarty->assign ( "rec" , $rec );
でアサインし、 テンプレート側では、
{foreach item=value key=key from=$rec name=rec}
<p> {$value.id} </p>
<p> {$value.name} </p>
{foreach item=seplist from=$value.list name=seplist}
{if $smarty.foreach.seplist.first}
<ul>
<li> {$seplist} </li>
{/if}
<li> {$seplist} </li>
{if $smarty.foreach.seplist.last}
<li> {$seplist} </li>
</ul>
{/if}
{/foreach}
{/foreach}
と、記述します。 id、nameは、$valueに続けて.でキーをつなげてやれば出力されますが、 listには更に配列が格納されているので、foreachを入れ子にし、 出力を定義させてやる必要があります。