PHP:preg_replace_callback更改结果的顺序

时间:2012-07-17 05:07:48

标签: php regex preg-replace-callback

我有以下代码

return preg_replace_callback(
    "#\{gallery: '(.+?)'(?: dir: ([0-1]))?\}#i",
    create_function('$i', 'echo $i[1];' ),
    $string);

我的问题是如果我的字符串看起来像这样:

top
{gallery: 'images/'}
center
{gallery: 'images/characters'}
bottom

渲染时它看起来像这样:

images/
images/characters
top center bottom

为什么订单被更改并将替换的代码置于顶部,将其他所有内容置于底部,即使是中间的东西?

1 个答案:

答案 0 :(得分:2)

您应该在替换回调中使用return语句:

$string = "top {gallery: 'images/'} center {gallery: 'images/characters'} bottom";
$string = preg_replace_callback(
  "#\{gallery: '(.+?)'(?: dir: ([0-1]))?\}#i", 
  create_function('$i', 'return $i[1];'), 
  $string
);
echo $string . PHP_EOL;

// Outputs: top images/ center images/characters bottom