maki-o memo

制作に関する私的なメモです

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


プロフィール

フロントエンドエンジニア

Tomokazu Makita

名古屋でフリーランスでWeb制作してます。 フロントエンドのことを主にやってます。
a-blog cmsを使用したサイト制作が得意です。
お仕事のご相談随時受付中。

雪山大すき。冬は雪山の合間に仕事します。
財布はいつも吹雪です。

エントリーリスト

タグ