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を入れ子にし、 出力を定義させてやる必要があります。