2009-11-03 3 views
2

Quelqu'un peut-il fournir une démo simple? Je n'arrive pas à comprendre le smarty syntax pour l'itération d'un tableau qui ressemble à celui ci-dessous. Je veux obtenir des valeurs à tous les niveaux.Est-il possible de itérer sur un tableau multidimensionnel dans 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

Réponses Mise à jour – Graviton

Répondre

3

Non testé, mais à partir du haut de ma tête, quelque chose comme ça.

Remarque: Je le fais comme ceci parce que vous avez dit que vous vouliez Smarty Syntax. Normalement je bourrerais ceci dans une fonction d'aide, créerais la liste/table/n'importe quoi là, et appelle juste la fonction d'aide de 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

Vous pouvez le faire comme la façon dont vous itérer sur un tableau PHP:

Voir here par exemple.

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; 
    } 
} 

Ou, vous pouvez utiliser $print_r($arr), ce imprimerait tout à l'intérieur d'un tableau, y compris le tableau dans l'élément de tableau.

+0

Il est similaire mais pas exactement le same.Can vous donner une démonstration de travail? – 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}