2012-07-17 53 views
-1

我有以下代码PHP: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 

为什么订单被更改并将替换后的代码放在顶端,其他所有内容都放到了b ottom,甚至是中间的东西?

+0

不应该在该问题被标记'regex'而不是'nsregularexpression'? – galymzhan 2012-07-17 05:09:21

+0

已修复,不好意思^^ – 2012-07-17 05:10:27

+2

在回调函数中不''echo'但是'return' – Lake 2012-07-17 05:18:01

回答

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 
+0

现在是2012.PHP有[匿名函数](http://php.net/manual/en/functions.anonymous.php)现在 – Phil 2012-07-17 05:24:41

+0

@菲尔:我的服务器运行在5.2:/ – 2012-07-17 05:29:42

+0

@galymzhan这解决了我的问题,非常感谢! – 2012-07-17 05:30:30