php替换影响替换的字符串

时间:2014-11-24 14:32:22

标签: php replace preg-replace str-replace

字符串是: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>

如何将替换仅限于第一次出现?某种程度上支持阵列作为针。

1 个答案:

答案 0 :(得分:3)

str_replace可以进行循环替换,因为它会为每次搜索/替换解析所有字符串。因此,一旦执行了第一次搜索/替换,您的字符串的新版本将用于其他搜索/替换。

解决方案是使用仅解析字符串一次的strtr。 (并且更快)

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