Smartyでネストしたループを扱う
連想配列の値が配列になっているデータ構造をSmartyで扱う場合、結論から言うと、foreachでは出来なかった*1ので、sectionでネストするのが確実?
test.php
<?php require_once("libs/Smarty.class.php"); $smarty = new Smarty(); $items = array(); $items[] = array( 'foo' => "hoge1", 'bar' => "hogehoge1", 'sublist' => array( array('foo' => "moge11", 'bar' => "mogemoge11"), array('foo' => "moge12", 'bar' => "mogemoge12"))); $items[] = array( 'foo' => "hoge2", 'bar' => "hogehoge2", 'sublist' => array( array('foo' => "moge21", 'bar' => "mogemoge21"), array('foo' => "moge22", 'bar' => "mogemoge22"), array('foo' => "moge23", 'bar' => "mogemoge23"))); $smarty->assign("items", $items); $smarty->display("test.tpl"); ?>
test.tpl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> {section name=pri loop=$items} pri_foo={$items[pri].foo}<br> pri_bar={$items[pri].bar}<br> {section name=sub loop=$items[pri].sublist} sub_foo={$items[pri].sublist[sub].foo}<br> sub_bar={$items[pri].sublist[sub].bar}<br> {/section} {/section} </body> </html>
結果
pri_foo=hoge1 pri_bar=hogehoge1 sub_foo=moge11 sub_bar=mogemoge11 sub_foo=moge12 sub_bar=mogemoge12 pri_foo=hoge2 pri_bar=hogehoge2 sub_foo=moge21 sub_bar=mogemoge21 sub_foo=moge22 sub_bar=mogemoge22 sub_foo=moge23 sub_bar=mogemoge23