如何修改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
相关产品推荐
相关产品推荐

