PHP的str_replace 和 strtr 比较

2021-09-25  本文已影响0人  Mr_dreamer

以前英文字符串替换都是用str_replace,直到有一天发现了 strtr, 具体用法就不赘述了,主要记录一下两个函数原理上的的区别,先贴一个例子

$text = "PHP: Hypertext Preprocessor";

$text_strtr = strtr($text  , array(
        "PHP" => "PHP: Hypertext Preprocessor"
        , "PHP: Hypertext Preprocessor" => "PHP"
));
$text_str_replace = str_replace(
      array("PHP", "PHP: Hypertext Preprocessor")
    , array("PHP: Hypertext Preprocessor", "PHP")
    , $text
);
var_dump($text_strtr);
var_dump($text_str_replace);

结果如下:

string(3) "PHP"
string(27) "PHP: Hypertext Preprocessor"

原理解析

str_replace
本函数按照数组的键值依次进行匹配替换,并不会因为匹配过了而终止程序
第一次全文匹配到 PHP, 结果变为 PHP: Hypertext Preprocessor: Hypertext Preprocessor
第二次全文匹配到PHP: Hypertext Preprocessor,结果变为PHP: Hypertext Preprocessor

strtr
本函数与str_replace 的不同在于

  1. 程序匹配优先级按照匹配字符串长度进行倒序排列,也就是说 不管顺序是怎样的 总是优先匹配替换字符串最长的键
  2. 字符串替换完成就会终止程序
    本例中第一次匹配变成PHP ,全部替换完毕,程序结束。

性能差异

创建了一个包含 500 万个随机字符串的数组。以下是排名靠前的结果:

str_replace : 676.59 ms 
strtr: 305.59 ms

strtr方法在此测量中快 2.2 倍 (54.83%)。平均快 2 倍 (51%)。

参考:
https://dev.to/devmount/4-php-tricks-to-boost-script-performance-ol1
https://stackoverflow.com/questions/8177296/when-to-use-strtr-vs-str-replace

上一篇下一篇

猜你喜欢

热点阅读