过滤器数组,合并到表达式中

时间:2014-08-10 19:49:24

标签: php regex

我在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 );

1 个答案:

答案 0 :(得分:0)

无需使用preg_replace_callback,您使用strtr的方式更快(从远处开始):

$filtersQuery = strtr($filterExp, $filters);