从Smarty中的数组中抓取某些值

时间:2017-10-22 15:26:55

标签: php arrays smarty smarty3 smarty2

我已经尝试了几个小时,如果它只是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< - 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>

这适用于输出到下拉列表

  • Jane Doe
  • John Doe
  • Jim Doe

我得到了那个部分,我一直在互联网上寻找这个。我的计划是引入类似

的下拉菜单
  • Jane Doe - jane@doe.com
  • John Doe - john@doe.com
  • Jim Doe - jim@doe.com

然而,当我尝试使用以下内容时,我删除 from

中的 .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 < / strong>它不会工作。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

它与你的方式不一样,但使用{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>

答案 1 :(得分:1)

Smarty 3让你使用php风格&#34; foreach&#34;但是保留了旧的Smarty 2风格,所以你可以简单地做到以下几点:

{foreach $arr as $idx => $person}
  <option value="{$person.client}">{$person.client} - {$person.email}</option>
{/foreach}

另外,根据Smarty 3手册:

  

{foreach}循环可以执行{section}循环可以执行的所有操作,并且具有更简单,更简单的语法。它通常比{section}循环更受欢迎。