Smarty使用array_search检查选中的复选框

时间:2010-11-23 18:55:08

标签: php smarty

我正在尝试根据智能数组中的值检查复选框。

在我的php中

$smarty->assign('locations_array',array(4,6,9,7));

我想搜索数组,如果匹配则选中复选框。 这是我在我的模板中尝试过但我无法使用它。我不知道如何将array_search传递给它需要的针和干草堆?

{foreach $locations as $x}
   {if $x.id == $x.id|@array_search:$locations_array}
   <label><input checked type="checkbox" name="locations[]" value="{$x.id}"/>{$x.title}</label>
   {else}
     <label><input type="checkbox" name="locations[]" value="{$x.id}" />{$x.title</label>
   {/if}
{/foreach}

这可以在不创建自定义功能的情况下实现吗?

3 个答案:

答案 0 :(得分:1)

如果没有实际回答你的主要问题(我不知道你是否可以从模板中将两个变量传递给函数),这可以通过在php文件中创建一个新数组而不是$locations来避免。只需查看已发布的代码,您就会希望每个元素都包含三个子元素:titleidchecked。这样您就可以避免在模板端跨阵列进行比较,也可以避免编写自定义函数。

答案 1 :(得分:1)

作为参考,我认为这是使用array_search时的正确语法。

 {if $x.id|array_search:$locations_array}

其中$ x.id是针,$ locations_array是数组haystack 我决定根据eknals反馈采用不同的方法

答案 2 :(得分:0)

我没有使用array_search但我有一些简单的解决方案来解决你的问题。 您可以使用foreach循环中的locations_array检查复选框值。

 **$i = 0;**
        {foreach $locations as $x}
           **{if $x.id == $locations_array[$i]}**
           <label><input checked type="checkbox" name="locations[]" value="{$x.id}"/>{$x.title}</label>
           {else}
             <label><input type="checkbox" name="locations[]" value="{$x.id}" />{$x.title</label>
           {/if}
**$i++;**
        {/foreach}