You need to enable JavaScript to run this app. Smarty模板中如何对存储分类ID的数组变量编写if包含判断
优惠活动
大模型
产品
解决方案
定价
更多

Smarty模板中如何对存储分类ID的数组变量编写if包含判断

Smarty判断分类数组包含指定ID的实现方案

你之前的写法不生效是因为$iCat是二维数组,每个子元素才包含category_id字段,不能直接对外层数组做包含判断,可选择以下任意一种方案实现:

方案1:直接调用PHP函数实现(最简洁,推荐)

Smarty3及以上版本支持直接调用PHP内置函数,可先提取所有分类ID为一维数组再做包含判断:

{if in_array(10, array_column($iCat, 'category_id'))}
  Do something
{/if}

方案2:遍历标记法(兼容低版本Smarty)

如果Smarty版本不支持直接调用上述PHP函数,可通过遍历加自定义标记的方式实现:

{* 先初始化标记变量为false *}
{assign var="hasCat10" value=false}
{foreach from=$iCat item=cat}
  {if $cat.category_id == 10}
    {assign var="hasCat10" value=true}
    {break} {* 匹配到后提前终止遍历,优化性能 *}
  {/if}
{/foreach}

{* 后续根据标记变量判断逻辑 *}
{if $hasCat10}
  Do something
{/if}

方案3:自定义修饰符(适合多场景复用)

如果项目多处需要用到类似判断,可以在PHP端注册自定义修饰符,模板调用更简洁:

  • PHP端注册修饰符代码:
// 注册判断分类ID是否存在的Smarty修饰符
$smarty->registerPlugin('modifier', 'has_category', function ($catList, $targetId) {
    foreach ($catList as $item) {
        if ($item['category_id'] == $targetId) return true;
    }
    return false;
});
  • 模板中直接调用:
{if $iCat|has_category:10}
  Do something
{/if}

内容的提问来源于stack exchange,提问作者OmletteDuFromage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:27:04