我有字符串$myString
,字符串的内容是随机时间" foo",但我不知道多少次!
我想要做的是为每个" foo"添加一个唯一的数字
例如:" foo foo foo" - > " foo1 foo2 foo3"
我目前的做法:
$z = 0;
$myString = preg_replace ( '/foo/' , 'foo'.++$z, $myString);
然后返回" foo1 foo1 foo1"
所以我的问题是:如何在PHP中以不同的方式替换字符串中的reoccuring文本?
谢谢! MasterBolle
答案 0 :(得分:1)
您可以计算字符串中单词 foo 的出现次数,然后通过循环出现的次数为每个 foo 添加一个数字:
$myString = 'foo foo foo';
$counts = substr_count($myString, 'foo');
$newString = '';
for ($i = 1; $i <= $counts; $i++) {
$newString .= 'foo' . $i . ' ';
}
答案 1 :(得分:1)
$myString = 'foo foo foo';
$i = 1;
echo $myString = preg_replace_callback ( '/foo/',
function($str) use (&$i) {return $str[0].$i++; },
$myString); // foo1 foo2 foo3
答案 2 :(得分:0)
要使用正则表达式,使用preg_replace_callback
(PHP手册和SO中有很多示例)。
没有正则表达式,使用explode
和array_reduce
:
$str = 'foosdfdsfdsfdfoofoosdfdsfdfoosdfoo';
$cnt = 0;
$result = array_reduce(explode('foo', $str), function($c,$i) use (&$cnt) {
return $c === false ? $i : $c . 'foo' . ++$cnt . $i;
}, false);