Bu smarty bir çok boyutlu bir dizi üzerinde yineleme mümkün mü?

3 Cevap php

Birisi basit bir demo verebilir misiniz? Ben aşağıdaki gibi görünen bir dizi üzerinden yineleme için smarty syntax etrafında başımı almak için görünmüyor olabilir. Ben her düzeyde değerleri almak istiyorum.

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
                        )

                )

        )

3 Cevap

Test edilmiş, ancak kafamın üstüne, böyle bir şey değil.

Not: Eğer Smarty dizimi istediğini söyledi çünkü ben böyle yapıyorum. Normalde, bir yardımcı fonksiyon içine şeyler ediyorum liste / tablo / ne olursa olsun orada oluşturmak ve sadece Smarty içinde yardımcı işlevini çağırın.

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

Eğer bir PHP dizi üzerinde yineleme ne gibi yapabilirsiniz:

here, örneğin bkz.

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

Veya, $print_r($arr), bu dizi öğe içinde bir dizi dahil, bir dizi içindeki her şeyi basacaktır kullanabilirsiniz.

smarty doc burada görmek (örnek 7.33)