2009-11-03 4 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

ответ

3

Не тестировался, но с верхней части моей головы, что-то вроде этого.

Примечание: Я делаю это так, потому что вы сказали, что хотите 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> 
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

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} 
Смежные вопросы