preg_replace() 根据出现顺序递增变量相同的字符串

preg_replace() the same string by increment variable based on occurrences order

我的字符串:

$string = "figno some text and another figno then last figno";

预期输出

1 some text and another 2 then last 3

到目前为止我试过了:

preg_match_all("/figno/s",$string,$figmatch);
$figno=0;
for($i=0;$i<count($figmatch[0]);$i++){
    $figno=$figno+1;
    $string=str_replace($figmatch[0][$i],$figno,$string);

}

但是它一次替换了所有出现的地方。我也尝试用 preg_replace 代替 str_replace() 但输出相同

使用preg_replace_callback

$count = 0;
preg_replace_callback('/figno/', 'rep_count', $string);

function rep_count($matches) {
  global $count;
  return $count++;
}

只需使用 preg_replace_callback(),这样它就会为您获得的每个匹配项调用匿名函数,然后通过引用传递变量 $count 以跟踪匹配项的数量,例如

<?php

    $string = "figno some text and another figno then last figno";
    $count = 1;
    echo preg_replace_callback("/figno/s", function($m)use(&$count){
        return $count++;
    }, $string);

?>

输出:

1 some text and another 2 then last 3