在 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>
- 1 回答
- 0 關注
- 96 瀏覽
添加回答
舉報
0/150
提交
取消