字符串是:1y1m1w1d1s
(一种简单的时间格式!),结果应该是:1years1months1weeks1days1seconds
。
我以这种方式尝试str_replace
:
$result = str_replace(array('s', 'h', 'd', 'w', 'm', 'y'), array('seconds', 'hours', 'days', 'weeks', 'months', 'years'), '1y1m1w1d1s');
但结果是:1years1months1weeks1dayearss1secondayearsss
,如您所见,d
替换了两次,首先是1 d ,然后是secon d 。< / p>
如何将替换仅限于第一次出现?某种程度上支持阵列作为针。
答案 0 :(得分:3)
str_replace
可以进行循环替换,因为它会为每次搜索/替换解析所有字符串。因此,一旦执行了第一次搜索/替换,您的字符串的新版本将用于其他搜索/替换。
解决方案是使用仅解析字符串一次的strtr
。 (并且更快)
$trans = array('s'=>'seconds', 'h'=>'hours', 'd'=>'days', 'w'=>'weeks', 'm'=>'months', 'y'=>'years');
$yourdate = strtr($yourdate, $trans);