是否有可能在smarty中迭代多维数组?

时间:2009-11-03 03:01:40

标签: php multidimensional-array smarty

有人可以提供简单的演示吗?我似乎无法绕过smarty syntax来迭代一个看起来像下面的数组。我希望得到所有级别的价值观。

Array
(
    [0] => Array
        (
            [id] => 0
            [name] => 12312
            [sub24] => Array
                (
                    [0] => Array
                        (
                            [classid] => 157
                            [classname] => 24011010
                        )

                    [1] => Array
                        (
                            [classid] => 170
                            [classname] => 24011020
                        )

                    [2] => Array
                        (
                            [classid] => 183
                            [classname] => 24011030
                        )

                )

            [sub23] => Array
                (
                    [0] => Array
                        (
                            [classid] => 60
                            [classname] => 23011010
                        )

                    [1] => Array
                        (
                            [classid] => 73
                            [classname] => 23011030
                        )

                    [2] => Array
                        (
                            [classid] => 85
                            [classname] => 23012030
                        )


                )

            [sub22] => Array
                (
                    [0] => Array
                        (
                            [classid] => 1
                            [classname] => 22011010
                        )

                    [1] => Array
                        (
                            [classid] => 13
                            [classname] => 22012010
                        )

                    [2] => Array
                        (
                            [classid] => 24
                            [classname] => 22012020
                        )

                )

        )

4 个答案:

答案 0 :(得分:3)

没有经过测试,但从我的头脑中,这样的事情。

注意:我这样做是因为你说你想要Smarty Syntax。通常我会把它填充到辅助函数中,创建list / table /无论在那里,只需从Smarty中调用辅助函数。

<html>
<head><title>Smarty Foreach Demo</title></head>
<body>
<p>This code assumes you have $smarty->assign()'ed $var to be your multi-dimensional array</p>

<ul>
{foreach from=$var key=key1 item=lvl1}
    <li>Current key: $key1,
    Current value:
    {if !is_array($lvl1)}
       {$lvl1}
    {else}
       Array:<ul>
       {foreach from=$lvl1 key=key2 item=lvl2}
           <li>Current key: $key1,
           Current value:
           {if !is_array($lvl1)}
               {$lvl1}
           {else}
               Even deeper array.. keep doing same stuff!
           {/if}
           </li>
       {/foreach}
       </ul>
   {/if}
 {/foreach}
</ul>
</body>

答案 1 :(得分:1)

你可以像迭代PHP数组一样:

例如,请参阅here

foreach ($array as $i => $value) {
    PrintValue($i, $value);
}

function PrintValue($key, $val)
{
    echo $key;
   if(is_array($val))
   {
      foreach($val as $i=>$value)
      {
          PrintValue($i, $value);
      }
   }
   else
   {
      echo $val;
   }
}

或者,您可以使用$print_r($arr),这将打印数组内的所有内容,包括数组元素中的数组。

答案 2 :(得分:1)

在此处查看smarty doc(示例7.33)

答案 3 :(得分:0)

{foreach from=$multi_array item=i}

    {if is_array($i) && count($i) > 0}

        {foreach from=$i item=j} <!-- if it is an array, lets create a loop from item=i, note the "$" in from=$i -->

            Class id: {$j.classid}<br />
            Class name: {$j.classname}<br />

        {/foreach}

    {else}

        {$i} <!-- will print id/name of your array -->

    {/if}

{/foreach}