You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Smarty模板中区分数组的整数与字符串并设置不同链接

区分Smarty数组中的整数与字符串值并设置不同链接

嘿,你已经完成了从数据库获取$com_likes数组并传递给Smarty模板的基础工作,接下来咱们就解决在模板里区分数值和字符串、设置不同链接的问题。这里有几种实用的方案:

直接在Smarty模板里判断类型(最便捷)

你的section循环已经搭好了,只需要在循环内部对每个字段值做类型检测就行。Smarty自带is_numeric修饰符,能轻松识别数字或数字格式的字符串(毕竟从数据库读出来的INT字段有时候会被转成字符串)。

假设你要处理的字段是like_id(换成你实际的字段名就行),代码可以这么写:

{section name=b loop=$com_likes}
    {* 先把当前字段值存到临时变量里,方便后续使用 *}
    {assign var="current_val" value=$com_likes[b].like_id}
    
    {* 判断是否为数值类型 *}
    {if $current_val|is_numeric}
        <!-- 整数/数值专属链接 -->
        <a href="numeric_detail.php?id={$current_val}">{$current_val}</a>
    {else}
        <!-- 字符串专属链接,记得用urlencode转义参数 -->
        <a href="string_detail.php?content={$current_val|urlencode}">{$current_val}</a>
    {/if}
{/section}

如果你需要严格区分原生整数类型(不是数字字符串),可以直接调用PHP的gettype函数来判断:

{if gettype($current_val) == 'integer'}
    <!-- 只有原生整数才走这个分支 -->
    <a href="strict_integer_link.php?id={$current_val}">{$current_val}</a>
{else}
    <a href="string_link.php?content={$current_val|urlencode}">{$current_val}</a>
{/if}

不过要注意:从数据库用mysqli_fetch_array默认返回的数值可能是字符串类型,这种情况下gettype会返回string,所以用is_numeric通常更贴合实际场景。

提前在PHP端标记类型(可选,更清晰)

如果你想让模板逻辑更简单,也可以在PHP拉取数据的时候,给每个字段加上类型标记:

$qry9="SELECT * FROM company_likes WHERE post_id='$pid'"; 
$result9=mysqli_query($bd, $qry9); 
$com_likes= array(); 
while($row9 = mysqli_fetch_assoc($result9)){ // 用fetch_assoc只拿关联数组,更干净
    // 给每个字段添加类型标记,比如给like_id加like_id_is_int
    $row9['like_id_is_int'] = is_int($row9['like_id']);
    $com_likes[] = $row9; 
}

然后在模板里直接用这个标记判断,不用再做类型检测:

{section name=b loop=$com_likes}
    {if $com_likes[b].like_id_is_int}
        <a href="numeric_link.php?id={$com_likes[b].like_id}">{$com_likes[b].like_id}</a>
    {else}
        <a href="string_link.php?content={$com_likes[b].like_id|urlencode}">{$com_likes[b].like_id}</a>
    {/if}
{/section}

小提醒

  • 记得把代码里的like_id替换成你实际要处理的字段名,比如user_id、content之类的。
  • 字符串作为URL参数时,一定要用urlencode修饰符转义,避免出现特殊字符导致链接失效。
  • 建议用mysqli_fetch_assoc代替mysqli_fetch_array,只获取关联数组,减少不必要的索引数组元素,让代码更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:07:27