我在PHP中有一个关联数组。 这是代码:
$result = mysql_query("SELECT * FROM `tb_menu` ORDER BY id ASC");
$menu = array();
$menu_index = array();
while($row = mysql_fetch_assoc($result)){
if($row['par'] == 0) {
$menu[] = $row;
$menu[sizeof($menu)-1]['child'] = array();
$menu_index[$row['id']] = &$menu[sizeof($menu)-1];
} else {
$menu_index[$row['par']]['child'][] = $row;
$menu_index[$row['id']] = &$menu_index[$row['par']]['child'][sizeof($menu_index[$row['par']]['child'])-1];
}
}
/*print ( '<pre>' ) ;
print_r ( $menu ) ;
print ( '</pre>' ) ; exit();*/
$smarty->assign('menu', $menu);
我不能让它在smarty上工作,因为我是初学者。 请帮我制作这样的多级菜单
<ul>
<li><a href="">first level</a>
<ul>
<li><a href="">second level</a></li>
......................................
<ul>
<li><a href="">N-level</a></li>
<ul>
</ul>
</li>
</ul>
</li>
由于
答案 0 :(得分:0)
这是一个如何在最新版本的Smarty中迭代某些多级数组的示例:
<ul>
{foreach $menu as $first_level}
<li><a href="">first level</a></li>
{/foreach}
{if array_key_exists('child', $first_level)}
<ul>
{foreach $first_level['child'] as $second_level}
<li><a href="">second level</a></li>
{/foreach}
{if array_key_exists('child', $second_level)}
<ul>
{foreach $second_level['child'] as $n_level}
<li><a href="">N-level</a></li>
{/foreach}
<li><a href="">N-level</a></li>
</ul>
{/if}
</ul>
{/if}
</ul>
这不是递归的,所以这假设您知道数组的深度......
以下是可用于执行递归模板的模式的链接:http://www.brain-dump.org/blog/entry/32
答案 1 :(得分:0)
$menu= array(
'about' => 'url',
'contact' => 'url',
'service' =>array(
'service1' => 'url',
'service2' => 'url',
'service3' => 'url',
'service4' => 'url'),
'others'=>array(
'other1' => 'url',
'other2' =>'url',
'other3' =>'url'),
'session'=>'url'
);
这是我们如何在我们的Smarty3模板中迭代这个多级数组的一个例子
<ul >
{foreach $menu as $value}
{if $value|is_array}
<li><a href="#" >{$value@key}</a>
<ul>
{foreach $value as $subvalue}
<li><a href="#">{$subvalue@key}</a></li>
{/foreach}
</ul>
</li>
{else}
<li><a href="{$value}">{$value@key|capitalize} </a></li>
{/if}
{/foreach}
</ul>