Как использовать Foreach (Smarty) в 3D Array?

как пользоваться foreach (всезнайка) в 3D Array?

я хочу этот код получить 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}

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]