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

如何修改PHP函数实现占位符按变量状态替换默认值

PHP占位符{{$string, "val"}}的变量替换实现

我原本有一个处理{{#x,y}}格式占位符的函数,功能是从备选值中随机返回一个:

$res = preg_replace_callback('/{{[#]([\w,]{1,})}}/', function ($match)  {
    $numbers = explode(',', $match[1]);
    shuffle($numbers);
    return isset($numbers[0]) ? $numbers[0] : '{#'.$match[0].'}';
}, $res);

现在需要修改该函数,实现对{{$string, "val"}}格式占位符的处理:若$string变量已定义且非空,使用变量实际值;若变量未定义或为空,则使用"val"作为默认值。

修改后的代码实现

$res = preg_replace_callback('/{{\$(\w+),\s*"([^"]+)"}}/', function ($match) {
    $varName = $match[1];
    $defaultVal = $match[2];

    // 检查变量是否存在且非空(排除仅含空白字符的情况)
    if (isset($$varName) && trim($$varName) !== '') {
        return $$varName;
    }

    return $defaultVal;
}, $res);

关键逻辑说明

  • 正则匹配规则:/{{\$(\w+),\s*"([^"]+)"}}/精准匹配目标占位符:
    • {{\$(\w+)}}捕获变量名(如string);
    • ,\s*兼容逗号前后的空白字符,提升格式容错性;
    • "([^"]+)"捕获双引号包裹的默认值内容,自动去除外层引号。
  • 可变变量使用:通过$$varName动态访问对应名称的变量,避免硬编码变量名;
  • 非空判断:用trim($$varName) !== ''确保变量不是仅含空白字符的无效值。

示例验证

示例1:变量存在且有效

$string = "Hello";
$res = 'This is a test {{$string, "Ok"}}';

// 执行替换逻辑
$res = preg_replace_callback('/{{\$(\w+),\s*"([^"]+)"}}/', function ($match) {
    $varName = $match[1];
    $defaultVal = $match[2];
    if (isset($$varName) && trim($$varName) !== '') {
        return $$varName;
    }
    return $defaultVal;
}, $res);

echo $res; // 输出:This is a test Hello

示例2:变量未定义

$res = 'This is a test {{$string, "Ok"}}';

// 执行替换逻辑
$res = preg_replace_callback('/{{\$(\w+),\s*"([^"]+)"}}/', function ($match) {
    $varName = $match[1];
    $defaultVal = $match[2];
    if (isset($$varName) && trim($$varName) !== '') {
        return $$varName;
    }
    return $defaultVal;
}, $res);

echo $res; // 输出:This is a test Ok

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:46:06