从 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 把我绊倒了,文件是两个

我将 .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>

这可以输出到下拉列表

我做对了那部分,我一直在网上寻找解决办法。我的计划是在下拉列表中引入类似

的内容

然而,当我使用类似下面的方法尝试这样做时,我删除了 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>

我遇到了一个看起来像这样的列表

我意识到这基本上是第一个字母和数字,但我在网上看到各种示例表明我可以从数组中获取我需要的内容,但是当我尝试 $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.