我正在尝试根据智能数组中的值检查复选框。
在我的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}
这可以在不创建自定义功能的情况下实现吗?
答案 0 :(得分:1)
如果没有实际回答你的主要问题(我不知道你是否可以从模板中将两个变量传递给函数),这可以通过在php文件中创建一个新数组而不是$locations
来避免。只需查看已发布的代码,您就会希望每个元素都包含三个子元素:title
,id
和checked
。这样您就可以避免在模板端跨阵列进行比较,也可以避免编写自定义函数。
答案 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}