为了账号安全,请及时绑定邮箱和手机立即绑定

如果变量包含数组中的值,如何在变量周围添加 HTML 标签,如果 Smarty 中不包含数组值

如果变量包含数组中的值,如何在变量周围添加 HTML 标签,如果 Smarty 中不包含数组值

PHP
慕的地10843 2023-12-15 16:14:43
在 Smarty 中,我有这个变量:{assign var=newNAME value='SNMS Stros Mos KOP2 APC'}我有以下数组:{$spec_array = ['Stros Mos', 'Monk Dup', 'Lip Mok']}我需要检查“Stros Mos”是否已存在$newNAME 位于数组中。在我搜索“如何检查字符串是否包含数组中的值”时,我发现您可以循环遍历数组。在这种情况下,条件是:“如果该值包含在数组中,则在其周围添加 <i></i>,如果不包含,则保持原样”。这就是我想到的:{foreach from=$spec_array item=spec}        {if $newNAME|strpos:$spec}        <span class="thumbName">{$newNAME|replace:$spec:"<i>$spec</i>" nofilter}</span>        {else}        <span class="thumbName">{$newNAME}</span>        {/if}        {/foreach}问题是它输出 3 <span>,如下所示:SNMS <i>Stros Mos</i> KOP2 APCSNMS Stros Mos KOP2 APCSNMS Stros Mos KOP2 APC我明白为什么:这是因为数组中的项目正在循环,如果满足条件 - 在值周围添加斜体,如果不直接打印它。因为数组中有 3 个值,所以我得到 3 个输出。我只需要第一个输出。 $newNAME 可以是任何内容,有时它不会包含 $spec_array 中的任何值。我觉得这里的 foreach 循环不起作用。我知道这是一个逻辑问题,而不是编码问题,但我对 PHP 和 Smarty 确实很陌生,而且我不是一个伟大的思考者。任何帮助表示赞赏。
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

如果发现匹配,您需要使用新变量并中断循环。另外,条件 $newNAME|strpos:$spec !== false 更好(如果允许在文本的“0”位置搜索字符串)。


    {foreach $spec_array as $spec}

        {if $newNAME|strpos:$spec !== false}

            {assign var=newNAME_parsed value=$newNAME|replace:$spec:"<i>$spec</i>"}

            {break}

        {else}

            {assign var=newNAME_parsed value=$newNAME}

        {/if}

    {/foreach}


<span class="thumbName">{$newNAME_parsed nofilter}</span>


查看完整回答
反对 回复 2023-12-15
  • 1 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信