嵌套数组如何使用smarty(循环中的循环)来正确使用它

时间:2014-09-23 21:19:19

标签: php foreach smarty

我无法弄清楚如何在smarty中循环我的数组,我已经阅读了文档,但有些原因我可以把它弄好。

我有一个数组中的数组。第一个是"类别"在类别中有数据的数组。

现在我想使用smarty显示所有类别名称及其中的项目。我的数组看起来像这样:

Array
(
    [catAddons] => Array
        (
            [0] => Array
                (
                    [id] => 25
                    [name] => this is a addon group name
                    [group_categoryid] => 295
                    [group_description] => 
                    [group_optiontype] => single
                    [group_sort] => 0
                    [addons] => Array
                        (
                            [0] => Array
                                (
                                    [addon_id] => 47
                                    [addon_group_id] => 25
                                    [addon_name] => bla
                                    [addon_priceoption] => paid
                                    [addon_purchaseprice] => 1.00
                                    [addon_price] => 2.00
                                    [addon_sort] => 0
                                )

                            [1] => Array
                                (
                                    [addon_id] => 48
                                    [addon_group_id] => 25
                                    [addon_name] => nbalba
                                    [addon_priceoption] => free
                                    [addon_purchaseprice] => 0.00
                                    [addon_price] => 0.00
                                    [addon_sort] => 0
                                )

                        )

                )

        )

我正在这样做:

{foreach from=$catAddons.0 key=k item=i}
    {$k} : {$i}
        {if $k eq 'addons'}
      {foreach from=$i.addons item=v}
          {$v}
      {/foreach}
        {/if}
{/foreach}

第一个$& $ i显示"类别的数据"这是有效的。但现在我想循环[addons]的内容,但第二个循环没有显示任何内容。当我删除if语句时,它会显示Warning: Illegal string offset 'addons' in...  我怎么能这样做?

//编辑更新的循环

{foreach from=$catAddons key=k item=i} <!-- ?? loop -->
    {$k} : {$i}
    {foreach from=$i key=k item=i} <!-- Group loop -->
    {$k} {$i}
    {/foreach}
{/foreach}

这个显示所有组的数据..但是然后插件显示像这样的Addons:Array ...但我不知道如何在循环中循环它

1 个答案:

答案 0 :(得分:0)

要在Smarty中循环关联数组,请使用以下语法:

{foreach from=$assoc_arr key=k item=i}
    {$k} : {$i}
{/foreach}

要遍历数字索引(非关联)数组,请使用以下命令:

{foreach from=$num_arr item=i}
    {$i}
{/foreach}

因此,如果您混合使用数字和关联数组,则必须相应地深入研究它们:

{foreach from=$catAddons item=x}                 <!-- numerically-indexed array -->
    {foreach from=$x key=k item=i}               <!-- associative array -->
        <p>key: {$k} => item: {$i}</p>
        {if $k eq 'addons'}                      <!-- access a nested array -->
            {foreach from=$i item=ix}            <!-- numerically-indexed array -->
                {foreach from=$ix key=k2 item=v} <!-- associative array -->
                    <p>k2: {$k2} => value: {$v}</p>
                {/foreach}
            {/foreach}
        {/if}
    {/foreach}
{/foreach}