从 Smarty 中的数组中获取某些值
Grabbing certain values from an array in Smarty
我已经尝试了几个小时,如果只是 PHP 我现在就可以完成了,但这需要 Smarty 3,所以情况有点不同。我很难从数组中获取特定的复数键。数组看起来像这样
Array
(
[0] => Array
(
[id] => 1
[client] => Jane Doe
[email] => jane@doe.com
)
[1] => Array
(
[id] => 2
[client] => John Doe
[email] => john@doe.com
)
[2] => Array
(
[id] => 3
[client] => Jim Doe
[email] => jim@doe.com
)
我可以使用 PHP 访问这个很好,Smarty 把我绊倒了,文件是两个
- clients.php
- clients.tpl <- 聪明人
我将 .php 文件中的数组分配如下
$totalEntries = $results['products']['product'];
$ca->assign('innerArray', $totalEntries);
$results['products']['product']
是上面看到的数组的输出。
现在在 .tpl 文件中,我有以下内容
<select class="form-control" id="sel1">
{foreach $innerArray as $results}
{foreach from=$results.client item=label}
<option value="{$label}">{$label}</option>
{/foreach}
{/foreach}
</select>
这可以输出到下拉列表
- 李四
- 李四
- 吉姆·多伊
我做对了那部分,我一直在网上寻找解决办法。我的计划是在下拉列表中引入类似
的内容
- Jane Doe - jane@doe.com
- John Doe - john@doe.com
- 吉姆·多伊 - 吉姆@doe.com
然而,当我使用类似下面的方法尝试这样做时,我删除了 from=[=15= 的 .client 部分]
<select class="form-control" id="sel1">
{foreach $innerArray as $results}
{foreach from=$results item=label}
<option value="{$label.client}">{$label.client} - {$label.email}</option>
{/foreach}
{/foreach}
</select>
我遇到了一个看起来像这样的列表
- 1 - 1
- J - J
- j - j
- 2 - 2
- J - J
- j - j
- 3 - 3
- J - J
- j - j
我意识到这基本上是第一个字母和数字,但我在网上看到各种示例表明我可以从数组中获取我需要的内容,但是当我尝试 $label.client - $label.email 它不会工作。
我做错了什么?
这与您的做法不同,但使用 {section} 可以:
<select class="form-control" id="sel1">
{section name=seq loop=$innerArray}
<option value="{$innerArray[seq].id}">{$innerArray[seq].client} - $innerArray[seq].email}</option>
{/section}
</select>
Smarty 3 允许您使用 php 风格 "foreach" 但保留旧的 Smarty 2 风格,因此您可以简单地执行以下操作:
{foreach $arr as $idx => $person}
<option value="{$person.client}">{$person.client} - {$person.email}</option>
{/foreach}
此外,根据 Smarty 3 手册:
The {foreach} loop can do everything a {section} loop can do, and has a simpler and easier syntax. It is usually preferred over the {section} loop.
我已经尝试了几个小时,如果只是 PHP 我现在就可以完成了,但这需要 Smarty 3,所以情况有点不同。我很难从数组中获取特定的复数键。数组看起来像这样
Array
(
[0] => Array
(
[id] => 1
[client] => Jane Doe
[email] => jane@doe.com
)
[1] => Array
(
[id] => 2
[client] => John Doe
[email] => john@doe.com
)
[2] => Array
(
[id] => 3
[client] => Jim Doe
[email] => jim@doe.com
)
我可以使用 PHP 访问这个很好,Smarty 把我绊倒了,文件是两个
- clients.php
- clients.tpl <- 聪明人
我将 .php 文件中的数组分配如下
$totalEntries = $results['products']['product'];
$ca->assign('innerArray', $totalEntries);
$results['products']['product']
是上面看到的数组的输出。
现在在 .tpl 文件中,我有以下内容
<select class="form-control" id="sel1">
{foreach $innerArray as $results}
{foreach from=$results.client item=label}
<option value="{$label}">{$label}</option>
{/foreach}
{/foreach}
</select>
这可以输出到下拉列表
- 李四
- 李四
- 吉姆·多伊
我做对了那部分,我一直在网上寻找解决办法。我的计划是在下拉列表中引入类似
的内容- Jane Doe - jane@doe.com
- John Doe - john@doe.com
- 吉姆·多伊 - 吉姆@doe.com
然而,当我使用类似下面的方法尝试这样做时,我删除了 from=[=15= 的 .client 部分]
<select class="form-control" id="sel1">
{foreach $innerArray as $results}
{foreach from=$results item=label}
<option value="{$label.client}">{$label.client} - {$label.email}</option>
{/foreach}
{/foreach}
</select>
我遇到了一个看起来像这样的列表
- 1 - 1
- J - J
- j - j
- 2 - 2
- J - J
- j - j
- 3 - 3
- J - J
- j - j
我意识到这基本上是第一个字母和数字,但我在网上看到各种示例表明我可以从数组中获取我需要的内容,但是当我尝试 $label.client - $label.email 它不会工作。
我做错了什么?
这与您的做法不同,但使用 {section} 可以:
<select class="form-control" id="sel1">
{section name=seq loop=$innerArray}
<option value="{$innerArray[seq].id}">{$innerArray[seq].client} - $innerArray[seq].email}</option>
{/section}
</select>
Smarty 3 允许您使用 php 风格 "foreach" 但保留旧的 Smarty 2 风格,因此您可以简单地执行以下操作:
{foreach $arr as $idx => $person}
<option value="{$person.client}">{$person.client} - {$person.email}</option>
{/foreach}
此外,根据 Smarty 3 手册:
The {foreach} loop can do everything a {section} loop can do, and has a simpler and easier syntax. It is usually preferred over the {section} loop.