带有关联键的智能嵌套foreach


Smarty nested foreach with associative keys

PHP:

<?php
$menu = array(
            array('label' => 'myLabel', 'submenu' =>
                array('label' => 'test label',
                    'label' => 'test label',
                    'label' => 'test label'
            )),
            array(...)
        );
 $smarty->assign(array('menu' => $menu));

TPL:

<ul>        
    {foreach from=$menu key=k item=elem}
    <li>
        <div>
            {$elem.label}
        </div>
        <ul>
            {foreach from=$elem.submenu item=subelem}
                <li>{$subelem.label}</li>
            {/foreach}
        </ul>
    </li>
    {/foreach}
</ul>

请注意,像$menu = array(array("A"), array("B"), array("C"));这样的数组运行良好。

我哪里错了?这有可能吗?还是smarty做不到?


EDIT:问题是:这会在正确的html上下文中输出子列表的第一个列表和第一个元素的第一个字母。

你做错了什么

内部foreach就是问题所在。内部foreach中的项(子元素(不是数组(正如你所想的那样(,而是字符串。

解决方案

这应该有效:

<ul>        
    {foreach from=$menu key=k item=elem}
    <li>
        <div>
            {$elem.label}
        </div>
        <ul>
            {foreach from=$elem.submenu key=label item=text_label}
                <li>{$text_label}</li>
            {/foreach}
        </ul>
    </li>
    {/foreach}
</ul>