过滤器数组,合并为表达式


array of filters, merge into expression

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

不需要使用preg_replace_callback,您有一个更快的方式(从远处)使用strtr:

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