2016-05-31 60 views
0

我有字符串$myString並且字符串的內容是隨機時間「foo」,但我不知道有多少次!
我想要做的是爲每個「富」添加一個唯一的編號。
例如: 「富富富」 - > 「foo1 foo2的foo3」

我目前的做法: $z = 0; $myString = preg_replace ('/foo/' , 'foo'.++$z, $myString);
當然 「foo1 foo1 foo1」
以不同的方式替換字符串中的文本

所以我的問題這個回報是:如何在PHP中以不同的方式替換字符串中的文本?

謝謝!
MasterBolle

回答

0

這樣做與正則表達式的方式是使用preg_replace_callback(在PHP手冊和SO中有很多例子)

沒有正則表達式,使用explodearray_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); 
1

你可以在你的字符串數字FOO的出現,然後與一些通過循環出現的次數將它們添加到每個

$myString = 'foo foo foo'; 
    $counts = substr_count($myString, 'foo'); 
    $newString = ''; 

    for ($i = 1; $i <= $counts; $i++) { 
     $newString .= 'foo' . $i . ' '; 
    } 
+0

如果這個不適合你的情況,你可以使用'preg_replace_callback',使一個函數,增加了大量的字符串,但你必須將當前數字保留在全局變量中,以便增加它。 – TheFallen

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 

demo