2009-11-03 94 views
2

有人可以提供一個簡單的演示嗎?我似乎無法繞過smarty syntax以迭代一個看起來像下面的數組。我想要得到各個層面的價值。是否可以在smarty中迭代多維數組?

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 
         ) 

       ) 

     ) 
+0

答案更新 – Graviton 2009-11-03 06:29:05

回答

3

沒有測試,但是從我的頭,像這樣的頂部。

注:我這樣做是因爲你說你想要Smarty語法。通常情況下,我會把這個插入到一個輔助函數中,創建list/table /不管那裏,然後在Smarty中調用helper函數。

<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

你能做到怎麼樣,你遍歷一個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),這將打印所有的數組裏面,包括數組元素中的數組。

+0

這是相似但不完全相同的same.Can你給一個工作演示? – another 2009-11-03 05:39:09

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}