2014-09-21 4 views
0

Как использовать foreach (smarty) в 3D-массиве?Как использовать Foreach (smarty) в 3D-массиве?

я хочу этот код, чтобы получить cat_title и cat_id

, но я не получаю sub_id и sub_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} 

I Массив 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> 

, как и ожидалось.

Если вы хотите, вы можете даже перечислить все элементы своих массивов.

Для того же PHP файл, который вы могли бы использовать следующий Smarty файл:

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

Смежные вопросы