【问题标题】:Is it possible to iterate over a multi-dimensional array in smarty?是否可以在 smarty 中迭代多维数组?
【发布时间】:2009-11-03 03:01:40
【问题描述】:

谁能提供一个简单的演示?我似乎无法理解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
                        )

                )

        )

【问题讨论】:

    标签: php multidimensional-array smarty


    【解决方案1】:

    未经测试,但从我的脑海中,类似这样的东西。

    注意:我这样做是因为你说你想要 Smarty Syntax。通常我会把它塞进一个辅助函数中,在那里创建列表/表格/任何东西,然后从 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>
    

    【讨论】:

      【解决方案2】:

      您可以像遍历 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),这将打印数组内的所有内容,包括数组元素内的数组。

      【讨论】:

      • 类似但不完全相同。你能给出一个工作演示吗?
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        {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}
        

        【讨论】:

          猜你喜欢
          • 2011-11-20
          • 2012-01-14
          • 2020-11-13
          • 2011-03-11
          • 2012-01-14
          • 2023-03-08
          • 2014-05-17
          • 1970-01-01
          相关资源
          最近更新 更多