2014-09-21 55 views
0

如何在3D数组中使用foreach(smarty)?如何在3D数组中使用Foreach(smarty)?

我希望这个代码来获取cat_titleCAT_ID

,但我不得到sub_idsub_title

我得到类别subgategory

我的代码TPL smary

{foreach $catData as $cat} 
    <ul class="catName"> 
     <lable>{$cat.cat_title}</lable> 
     {foreach $subData as $sub} 
      <li class="subName">{$sub.sub_title}</li> 
     {/foreach} 
    </ul> 
{/foreach} 

我阵列3D:

CAT_ID和cat_title是一个项目,但sub_id和sub_title更项目。都在一个阵列

阵列阵列CAT_ID [一项],cat_title [一项],sub_id [更多项],sub_title [更多项]))

Array 
(
    [1] => Array 
     (
      [cat_title] => Cat1 
      [cat_id] => 1 
      [sub_id] => Array 
       (
        [0] => 1 
        [1] => 2 
        [2] => 3 
        [3] => 4 
       ) 

      [sub_title] => Array 
       (
        [0] => sub1 
        [1] => sub2 
        [2] => sub3 
        [3] => sub4 
       ) 

     ) 

    [7] => Array 
     (
      [cat_title] => Cat2 
      [cat_id] => 7 
      [sub_id] => Array 
       (
        [0] => 1 
        [1] => 2 
        [2] => 3 
       ) 

      [sub_title] => Array 
       (
        [0] => sub1 
        [1] => sub2 
        [2] => sub3 
       ) 

     ) 

    [11] => Array 
     (
      [cat_title] => Cat3 
      [cat_id] => 11 
      [sub_id] => Array 
       (
        [0] => 1 
        [1] => 2 

       ) 

      [sub_title] => Array 
       (
        [0] => sub1 
        [1] => sub2 
       ) 

     ) 

    [18] => Array 
     (
      [cat_title] => Cat4 
      [cat_id] => 12 
      [sub_id] => Array 
       (
        [0] => 1 
        [1] => 2 
        [2] => 3 
        [3] => 4 

       ) 

      [sub_title] => Array 
       (
        [0] => sub1 
        [1] => sub2 
        [2] => sub3 
        [3] => sub4 

       ) 

     ) 
) 

我找到了答案: php smarty loop multidimensional array

{foreach from=$catData item=catlist} 
<ul class="catName"> 
    <lable data-catid="{$catlist.cat_id}">{$catlist.cat_title}</lable> 
    {foreach from=$catlist.sub_title key=k item=sublist} 
    <li class="subName" data-subid="{$catlist.sub_id.$k}">{$sublist}</li> 
    {/foreach} 
</ul> 
{/foreach} 

回答

0

您找到了可行的解决方案,但它使用了Smarty2语法,而不是更新更清晰的Smarty 3语法。

你的情况,如果您有:

PHP文件:

$data = Array 
(
    1 => Array 
    (
     'cat_title' => 'Cat1', 
     'cat_id' => 1, 
     'sub_id' => Array 
     (
      0 => 1, 
      1 => 2, 
      2 => 3, 
      3 => 4, 
     ), 
     'sub_title' => Array 
     (
      0 => 'sub1', 
      1 => 'sub2', 
      2 => 'sub3', 
      3 => 'sub4', 
     ) 

    ), 
    7 => Array 
    (
     'cat_title' => 'Cat2', 
     'cat_id' => 7, 
     'sub_id' => Array 
     (
      0 => 1, 
      1 => 2, 
      2 => 3, 
     ), 
     'sub_title' => Array 
     (
      0 => 'sub1', 
      1 => 'sub2', 
      2 => 'sub3', 
     ) 

    ) 
); 


$smarty->assign('catData', $data); 

Smarty的文件:

{foreach $catData as $cat} 
    <ul class="catName"> 
     <label>{$cat.cat_title}</label> 
     {foreach $cat['sub_title'] as $sub} 
      <li class="subName">{$sub}</li> 
     {/foreach} 
    </ul> 
{/foreach} 

输出将是:

<ul class="catName"> 
    <label>Cat1</label> 
       <li class="subName">sub1</li> 
       <li class="subName">sub2</li> 
       <li class="subName">sub3</li> 
       <li class="subName">sub4</li> 
     </ul> 
<ul class="catName"> 
    <label>Cat2</label> 
       <li class="subName">sub1</li> 
       <li class="subName">sub2</li> 
       <li class="subName">sub3</li> 
     </ul> 

预期。

如果你想要的话,你甚至可以列出数组的所有元素。

对于您可以使用下面的Smarty的文件相同的PHP文件:

{foreach $catData as $cat} 
    {foreach $cat as $what => $item} 
     <strong>{$what}</strong>: 
     {if not $item|is_array} 
      {$item} 
     {else} 
      {foreach $item as $value} 
       <li class="subName">{$value}</li> 
      {/foreach} 
     {/if} 
     <br /> 
    {/foreach} 
{/foreach} 

,现在将得到下面的输出:

<strong>cat_title</strong>: 
     Cat1 
    <br /> 
<strong>cat_id</strong>: 
     1 
    <br /> 
<strong>sub_id</strong>: 
         <li class="subName">1</li> 
       <li class="subName">2</li> 
       <li class="subName">3</li> 
       <li class="subName">4</li> 
       <br /> 
<strong>sub_title</strong>: 
         <li class="subName">sub1</li> 
       <li class="subName">sub2</li> 
       <li class="subName">sub3</li> 
       <li class="subName">sub4</li> 
       <br /> 

<strong>cat_title</strong>: 
     Cat2 
    <br /> 
<strong>cat_id</strong>: 
     7 
    <br /> 
<strong>sub_id</strong>: 
         <li class="subName">1</li> 
       <li class="subName">2</li> 
       <li class="subName">3</li> 
       <br /> 
<strong>sub_title</strong>: 
         <li class="subName">sub1</li> 
       <li class="subName">sub2</li> 
       <li class="subName">sub3</li> 
       <br /> 

你也应该在你的HTML输出工作,因为你不能请输入<ul>列出除<li>以外的元素,此处使用的是未知元素<lable>

相关问题