首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从preg_replace到preg_replace_callback的转换

从preg_replace到preg_replace_callback的转换
EN

Stack Overflow用户
提问于 2017-09-20 00:15:45
回答 1查看 35关注 0票数 0

很抱歉重复这个问题,但我有使用preg_replace函数的个人案例。此函数用于将模板($data)中的变量($vars)从名称替换为值

代码语言:javascript
运行
复制
function replace_vars($data, array $vars) {
    return preg_replace(array('/\{\{([a-zA-Z0-9_]+)\}\}/e', '/\{\{([a-zA-Z0-9_]+):(\d+)\}\}/e'),
        array("\$vars['\\1']", "\$vars['\\1'][\\2]"), $data);
}

$template片段

代码语言:javascript
运行
复制
<td>{{name}}</td>
<td>{{active_items}}</td>
<td>{{percents}} %</td>

函数调用

代码语言:javascript
运行
复制
$report = '';
$f['name'] = 'some name';
$f['active_items'] = 237;
$f['percents'] = 'some name';
$report .= $mailer->replace_vars($template, $f);

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2017-09-20 00:30:58

如果我能很好地理解你,这很简单。

代码语言:javascript
运行
复制
preg_replace_callback([...], function($matches) use ($vars) {
  # Use ($vars) will inherit it from the current scope
  $v = $vars[$matches[1]]; # Select item with key of capturing group 1
  if ($matches[2]) { # If group 2 was matched
    $v = $v[$matches[2]]; # Select contents of item with the same key as it's value from the previous item
  }
  return $v; # Replace it.
}, [...]);

如果组2匹配,它会将每个匹配替换为$var[\1]$var[\1][\2]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46305261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档