我在PHP数组中定义了一组过滤器:
$filters = array();
$filters[1] = "STATUS = 'active'";
$filters[2] = "ID != '900'";
$filters[3] = "COUNTRY = 'US'";
//... can be up to 100 filters
我还有一个用户编写的表达式:
$filterExp = "1 AND (2 OR 3)";
我想用用户编写的表达式,并在过滤器数组中合并以创建如下输出字符串:
STATUS = 'active' AND (ID != '900' OR COUNTRY = 'US')
有人可以帮助我在PHP中使用正则表达式吗?我与它斗争了太久,现在必须寻求帮助。
编辑:
一直在努力解决preg_replace('(\d+)', '$filters["$1"]', $filterExp);
之类的问题,但我知道我错过了一些东西......
$filtersQuery = preg_replace_callback(
'(\d+)', function ($matches) use ($filters) {
return $filters[$matches[0]];
}, $filterExp
);
答案 0 :(得分:0)
无需使用preg_replace_callback
,您使用strtr
的方式更快(从远处开始):
$filtersQuery = strtr($filterExp, $filters);