【问题标题】:How do you access a nested array in smarty?如何在 smarty 中访问嵌套数组?
【发布时间】:2014-12-31 17:08:10
【问题描述】:

所以,我正在使用 Smarty2,但不了解 Smarty。试着在我去的时候学习它。 我有这个结构像这样的数组(来自 Var dump)

array(59) {
    [0]=> array(4) {
        [0]=> string(10) "CCX 4PLY"
        [1]=> string(3) "SYP"
        [2]=> string(4) "4X8 "
        [3]=> array(6) {
            [0]=> string(0) ""
            [1]=> string(0) ""
            [2]=> string(0) ""
            [3]=> int(761)
            [4]=> string(0) ""
            [5]=> string(0) ""
        }
    }
    [1]=> array(4) {
        [0]=> string(5) " CCX"
        [1]=> string(3) "SYP"
        [2]=> string(4) "4X8 "
        [3]=> array(6) {
            [0]=> string(0) ""
            [1]=> string(0) ""
            [2]=> string(0) "" 
            [3]=> string(0) ""
            [4]=> int(823)
            [5]=> int(937)
        }
    }
    ...
}

数组要长得多,但这应该足以让您了解我要做什么。如您所见,在每个数组中,都有另一个数组给出商品价格。有时没有价格,但这很好。那些场合不应该有。 所以,我需要做的是显示与特定项目相对应的价格。这是我在 smarty 中的代码。

<table>
{foreach name=outer item=row from=$indLine}
<tr>
{foreach key=key item=item from=$row}
<td>{$item}</td>
{foreach key=price item=price from=$row}
<td>{$indLine[4]}</td>
{/foreach}
{/foreach}
</tr>
{/foreach}

我的数组变量是 indLine。 indLine[4] 是我试图访问价格的地方。我曾尝试将其更改为行等。没有任何效果。我在浏览器中显示的内容如下。

CCX 4PLY阵列阵列阵列阵列SYP阵列阵列阵列阵列4X8阵列阵列阵列阵列阵列阵列阵列阵列阵列 CCX阵列阵列阵列阵列SYP阵列阵列阵列阵列4X8阵列阵列阵列阵列阵列阵列阵列阵列阵列 RSH 4层阵列阵列阵列阵列SYP阵列阵列阵列阵列4X8阵列阵列阵列阵列阵列阵列阵列阵列阵列 RSH阵列阵列阵列阵列SYP阵列阵列阵列阵列4X8阵列阵列阵列阵列阵列阵列阵列阵列阵列 S/F 4-PLY Array Array Array Array SYP Array Array Array Array 4X8 Array Array Array Array Array Array Array Array S/F SE Array Array Array Array SYP Array Array Array Array 4X8 Array Array Array Array Array Array Array Array

CCX 4PLY    0   SYP 0   4X8 0   Array   0
CCX 0   SYP 0   4X8 0   Array   0
RSH 4-PLY   0   SYP 0   4X8 0   Array   0
RSH 0   SYP 0   4X8 0   Array   0
S/F 4-PLY   0   SYP 0   4X8 0   Array   0
S/F SE  0   SYP 0   4X8 0   Array   0
RSH 3-PLY   0   SYP 0   4X8 0   Array   0
RSH 4-PLY   0   SYP 0   4X8 0   Array   0
RSH 0   SYP 0   4X8 0   Array   0
S/F 4-PLY   0   SYP 0   4X8 0   Array   0

【问题讨论】:

  • 显示你期望的输出。
  • 它需要类似于这个 #2 S4S 2X6 SYP $679 $674 $669 $689

标签: php templating smarty2


【解决方案1】:

我不确定每个值/数组代表什么以及您期望什么样的输出,但试试这个:

<table>
{foreach name=outer item=row from=$indLine}
 <tr>
  {foreach key=key item=item from=$row}
  {if is_array($item)}
  {foreach key=key item=price from=$item}
  <td>{$price}</td>
  {/foreach}
  {else}
  <td>{$item}</td>
  {/endif}
  {/foreach}
 </tr>
{/foreach}

当您在 foreach 循环中时,您使用由item 定义的变量。我建议你在 php 中构建 assocc 数组,然后使用数组键来打印你想要的数据,而不是盲目地遍历数组

【讨论】:

  • 这在某种程度上改变了浏览器的显示,但仍然没有做我需要它做的事情。它仍然显示“数组”而不是显示数组元素。
  • 我同时编辑了答案。您需要检查您正在打印的项目是否是一个数组,如果是,则再次对其进行迭代。
  • 这样做有一个例外。在这一行(foreach key=price item=price from=$item)上,我不得不将 key=price 更改为 key=key。感谢您为我指明正确的方向。我绝对将您的答案标记为正确。
  • 哦,对了,你不能让 key 和 item vars 命名相同,抱歉。我编辑了帖子。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-05-08
  • 2018-08-16
  • 2011-07-12
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多