不在匿名回调函数中递增变量

时间:2016-08-07 21:27:14

标签: php preg-replace preg-replace-callback

我试图以错误的方式同时使用preg_replacepreg_replace_callback。我做错了什么?

$str = '/admin/companies/{company}/projects/{project}/photos/{photo}/delete';
$pattern = '/({\w+})/';
$replacement = ['str_1', 'str_2', 'str_3'];

$i = 0;

$result = preg_replace_callback($pattern, function($matches) use ($i, $replacement) {
    return $replacement[$i++];
}, $str);
  • 当前输出:/admin/companies/str_1/projects/str_1/photos/str_1/delete
  • 预期输出:/admin/companies/str_1/projects/str_2/photos/str_3/delete

1 个答案:

答案 0 :(得分:2)

您希望通过引用传递$i,因此在使用$i++增加时会更新{<1}}:

$result = preg_replace_callback($pattern, function($matches) use (&$i, $replacement) {
    return $replacement[$i++];
}, $str);

请注意&之前的$i