2014-11-24 19 views
0

的字符串是:(!一個簡單的時間格式)1y1m1w1d1s,結果應該是:1years1months1weeks1days1secondsPHP更換會影響替換字符串

我這樣試過str_replace

$result = str_replace(array('s', 'h', 'd', 'w', 'm', 'y'), array('seconds', 'hours', 'days', 'weeks', 'months', 'years'), '1y1m1w1d1s');

,但結果是:1years1months1weeks1dayearss1secondayearsss,如你所見,d更換兩次,第一次在1 d然後在塞康d秒。

如何限制只更換到第一次出現?有些支持陣列的針。

+0

你可以給1作爲php.net說http://php.net/manual/en/function.str-replace.php你可以說計數執行的變化數量(這是一個例子) – 2014-11-24 14:35:08

+0

@MarcoMura:這意味着:'$ b = 1; $結果= str_replace函數(陣列( 'S', 'H', 'd', 'W', 'M', 'Y'),陣列( '秒', '小時', '天', '周', '月','年'),'1y1m1w1d1s',$ b);'?它返回相同的結果。 (注意最後一個參數應該通過引用發送) – mrdaliri 2014-11-24 14:38:43

回答

3

str_replace可以使圓形更換,因爲它解析爲每個搜索所有的字符串/替換。因此,一旦執行第一次搜索/替換,您的字符串的新版本將用於其他搜索/替換。

的解決方案是使用strtr它解析字符串只有一次。 (並且更快)

$trans = array('s'=>'seconds', 'h'=>'hours', 'd'=>'days', 'w'=>'weeks', 'm'=>'months', 'y'=>'years'); 
$yourdate = strtr($yourdate, $trans);