php preg_replace 替换变量,php-使用带有变量的preg_replace获取数据库记录

我正在寻找一种解决方案,可以使用preg_replace替换文本正文中的某些字符串,其中某些字符串可能包含一个变量,该变量然后将调用数据库来检索替换值(或检索该值的函数) .

例如,我可能要替换以下字符串,用斜体表示的是我正在使用的字符串:

{today} =>今天的日期

{title} =>文件名

{lang:12} =>从id = 12的数据库的“ lang”表中

显然,前两个很容易,但我在第三个方面苦苦挣扎.我唯一能想到的就是对所有不带冒号的对象进行替换,然后对所有不带冒号的对象进行替换,以触发功能.

解决方法:

您可以使用以下命令触发功能:

$s = preg_replace_callback('/\{lang:([0-9]+)\}/', function($m) {

$id = $m[1];

// Mysql query

return $string_from_database;

}, $s);

更好的方法是,使用必需的字符串缓存,这样就不会多次从数据库中获取它们:

if(preg_match_all('/\{lang:([0-9]+)\}/', $text, $m)) {

$ids = array_unique(array_filter($m[1], function($id) {

return (int)$id;

}));

$langs = array();

if($r = mysql_query('SELECT id, txt FROM Lang WHERE id IN('.implode(', ', $ids).')')) {

while($l = mysql_fetch_assoc($r)) $langs[$l['id']] = $l['txt'];

}

$text = preg_replace_callback('/\{lang:([0-9]+)\}/', function($m) use($langs) {

$id = $m[1];

return array_key_exists($id, $langs) ? $langs[$id] : '!!! Lang not found !!!';

}, $text);

}

标签:preg-replace,php

来源: https://codeday.me/bug/20191101/1980708.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值