2013-04-10 27 views

回答

6

嘗試這樣:

function pregRepler($matches) { 
    static $matchcount = 0; 
    // do stuff 
    $matchcount++; 
} 

這與匿名函數工作得更好,因爲我在my answer提到your other question,因爲這將避免出現問題,如果你有preg_replace_callback多次調用。

+0

非常感謝Kolink ...真的感謝的人 – sanchitkhanna26 2013-04-10 20:30:11

+0

@Kolink你不應該定義函數外的靜態?這會不會在每次通話中將$ matchcount重置爲0? – 2013-04-10 20:39:03

+0

@ nl-x不,變量是靜態的,所以它只會被定義和初始化一次。 – nickb 2013-04-10 20:48:20

0
$repled  = 0; 
function pregRepler($matches) 
{ 
    * do something 
    global $repled; 
    $repled++; 
} 

$str = preg_replace_callback($reg_exp,'pregRepler',$str); 

只計算一個全局變量。

1

需要通過使用可變別名共享兩個可變範圍之間的$count可變的,例如:

$callback = function($matches) use (&$count) { 
    $count++; 
    return sprintf("<%d:%s>", $count, $matches[0]); 
}; 

echo preg_replace_callback($pattern, $callback , $subject, $limit = -1, $count); 

調用之前,$count等於0調用$count被設置爲替換數後完成。在兩者之間,你可以在你的回調中算數。再次打電話時,您也可以再次設置爲零。

See it in action

http://php.net/preg_replace_callback