Php 用preg_replace替换字符串中的数组变量

Php 用preg_replace替换字符串中的数组变量,php,regex,Php,Regex,我试图使用正则表达式替换我创建的字符串中的数组值 例如: $params = array(1 => 'butter', 2 => 'yellow', 3 => 'good', 4 => 'low-fat'); $query = 'type=$params[1]&color=$params[2]&taste=$params[3]&content=$params[4]'; 我想使用preg_replace将$query中的所有$params替换为字符

我试图使用正则表达式替换我创建的字符串中的数组值

例如:

$params = array(1 => 'butter', 2 => 'yellow', 3 => 'good', 4 => 'low-fat');
$query = 'type=$params[1]&color=$params[2]&taste=$params[3]&content=$params[4]';
我想使用
preg_replace
$query
中的所有
$params
替换为字符串的实际值

我最初试图:

$query = preg_replace("(\$params\[[1-9]+[0-9]*\])",$query,$params);
但这似乎为$query创建了一个数组

我希望得到:

$query =  'type=butter&color=yellow&taste=good&content=low-fat';

你知道我哪里出了问题吗?

你需要使用
preg\u replace\u callback
来解决这个问题:

$val = preg_replace_callback('/\$params\[(\d+)\]/', function ($m) use ($params)
      { return $params[$m[1]]; }, $query);
//=> type=butter&color=yellow&taste=good&content=low-fat

为什么不这样做呢

$params = array(
    'type' => 'butter',
    'color' => 'yellow',
    'taste' => 'good',
    'content' => 'low-fat'
);
$query = http_build_query($params);

虽然设计总体上是错误的,但preg_replace调用的参数顺序错误。第三个参数是您正在处理的原始字符串。要替换键/值,我认为您必须捕获键,并使用它引用替换值<代码>\$params\[([1-9]+[0-9]*)\]谢谢您的帮助。你能解释一下
/\$params\[(\d+)\]/
和我原来的
(\$params\[[1-9]+[0-9]*\])
之间的区别吗?你的正则表达式正在捕获
$params[1]
而我的正是在捕获
1
。我们只需要number就可以从array
params
I试图在字符串中使用预定义格式获得索引值。我想匹配从URL传递到该字符串的参数,以创建我的变量。