【问题标题】:php replace affects on replaced stringphp replace 对替换字符串的影响
【发布时间】:2014-11-24 14:32:22
【问题描述】:

字符串是:1y1m1w1d1s(一种简单的时间格式!),结果应该是:1years1months1weeks1days1seconds。

我试过str_replace是这样的:

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

但结果是:1years1months1weeks1dayearss1secondayearsss,如您所见,d 被替换了两次,第一次在 1d 然后在第二次ds。

如何将替换仅限于第一次出现?以某种方式支持数组作为针。

【问题讨论】:

  • 你可以像 php.net 所说的那样给出计数 1 php.net/manual/en/function.str-replace.php 你可以用 count 来表示执行的更改次数(这是一个示例)
  • @MarcoMura:你的意思是:$b = 1; $result = str_replace(array('s', 'h', 'd', 'w', 'm', 'y'), array('seconds', 'hours', 'days', 'weeks', 'months', 'years'), '1y1m1w1d1s', $b);?它返回相同的结果。 (注意最后一个参数应该通过引用发送)

标签: php replace preg-replace str-replace


【解决方案1】:

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

解决方案是使用strtr,它只解析字符串一次。 (而且速度更快)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2022-01-22
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多