PHP的str_replace 和 strtr 比较

以前英文字符串替换都是用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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • php 基础教程 php文件如何在浏览器运行将php文件放进c:\\wamp64\www中,在浏览器输入http:...
    Tdithyrambus阅读 220评论 0 0
  • 本文内容较长,如有被截断或缺失,请参考原文:PHP函数参考24-常用字符串函数 - 9ong[http://www...
    思考的山羊阅读 313评论 0 0
  • php语法记录 // 表示单行注释 # #号也表示单行注释,用的比较少 /* 多行注释 这里是注释区域代码 *...
    withkai44阅读 246评论 0 1
  • bindec—二进制转换为十进制 pow($base,$exp) —指数表达式 返回base的exp次方的幂 ch...
    青青玉立阅读 356评论 0 0
  • 第一部分:php基础面试题 1.PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apach...
    98b8dc01512b阅读 352评论 0 0