我在PHP中的代碼 - :如何知道比賽計數preg_replace_callback - PHP
function pregRepler($matches)
{
* do something
}
$str = preg_replace_callback($reg_exp,'pregRepler',$str);
當功能pregRepler
,我想知道當前match number
一樣,如果它是第一個匹配或第二或其他什麼...
我該怎麼做。
我在PHP中的代碼 - :如何知道比賽計數preg_replace_callback - PHP
function pregRepler($matches)
{
* do something
}
$str = preg_replace_callback($reg_exp,'pregRepler',$str);
當功能pregRepler
,我想知道當前match number
一樣,如果它是第一個匹配或第二或其他什麼...
我該怎麼做。
嘗試這樣:
function pregRepler($matches) {
static $matchcount = 0;
// do stuff
$matchcount++;
}
這與匿名函數工作得更好,因爲我在my answer提到your other question,因爲這將避免出現問題,如果你有preg_replace_callback
多次調用。
$repled = 0;
function pregRepler($matches)
{
* do something
global $repled;
$repled++;
}
$str = preg_replace_callback($reg_exp,'pregRepler',$str);
只計算一個全局變量。
需要通過使用可變別名共享兩個可變範圍之間的$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
被設置爲替換數後完成。在兩者之間,你可以在你的回調中算數。再次打電話時,您也可以再次設置爲零。
非常感謝Kolink ...真的感謝的人 – sanchitkhanna26 2013-04-10 20:30:11
@Kolink你不應該定義函數外的靜態?這會不會在每次通話中將$ matchcount重置爲0? – 2013-04-10 20:39:03
@ nl-x不,變量是靜態的,所以它只會被定義和初始化一次。 – nickb 2013-04-10 20:48:20