怎么把数据库中读出的字符串{{name}}转换成变量名?然后在页面中获取值?

2015-09-20 15:18:44 +08:00
 CNCCTV
3433 次点击
所在节点    PHP
14 条回复
realpg
2015-09-20 15:37:18 +08:00
最简单的办法直接 eval ……
CNCCTV
2015-09-20 15:54:55 +08:00
@realpg 不懂,因为是在函数里使用正则替换的,会报未定义变量。
guoqiao
2015-09-20 15:59:40 +08:00
这不就是 django 或 jinja 的模板语法么
foccy
2015-09-20 16:05:02 +08:00
我觉得 extract 这个函数是不是能解决的这个问题?
CNCCTV
2015-09-20 16:36:16 +08:00
@guoqiao 没有使用模板
feiyuanqiu
2015-09-20 17:08:52 +08:00
get_defined_vars () 函数会获取到当前作用域已定义的变量及全局变量,返回一个键为变量名,值为变量值的数组

你可以用这个函数实现你的需求

$_definedVars = get_defined_vars ();
if (asset ($_definedVars[$name])) {
// blabla...
}
CNCCTV
2015-09-20 18:00:29 +08:00
@feiyuanqiu
这是在函数里的替换字符串转成变量,请问怎么做?
```php
$datas = preg_replace_callback ('/{{([\w\W]*?)}}/im',
function ($matches ) {
$matches=$matches[1];
return $matches;
},
$datas[0]);
return $datas;
```
CNCCTV
2015-09-20 18:06:13 +08:00
@feiyuanqiu 使用 print_r (get_defined_vars ());显示出来
Array
(
[matches] => Array
(
[0] => {{name}}
[1] => name
)

)
feiyuanqiu
2015-09-20 18:12:00 +08:00
@CNCCTV callback 那个匿名函数用 use 把要替换的变量传进去,在函数里直接调用对应的变量替换就行了

手机不好打字,可能没说清楚,待会回来用代码说明
feiyuanqiu
2015-09-20 18:14:17 +08:00
@CNCCTV 匿名函数是单独的作用域,要使用外部作用域的变量需要用 use 传进去
CNCCTV
2015-09-20 18:17:49 +08:00
@feiyuanqiu 没看懂。。。
feiyuanqiu
2015-09-20 18:56:22 +08:00
@CNCCTV 改了下你的代码

// 把会用到的变量都声明好
$vars = array (
'name' => 'blabla',
);

$result = preg_replace_callback ('/{{([\w\W]*?)}}/im', function ($matches ) use ($vars ) {
return isset ($vars[$matches[1]]) ? $vars[$matches[1]] : '';
});
CNCCTV
2015-09-20 19:12:34 +08:00
@feiyuanqiu 还要声明啊?不是自动获取全部变量吗?
CNCCTV
2015-09-20 23:55:26 +08:00
@feiyuanqiu 现在算是做好了,通过传参数方式,但是还有一个新问题,如果替换的变量是一个数组,返回输出会报错,这怎么办啊?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/222181

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX