2012-07-17 54 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