美文网首页
PHP的str_replace 和 strtr 比较

PHP的str_replace 和 strtr 比较

作者: Mr_dreamer | 来源:发表于2021-09-25 23:53 被阅读0次

    以前英文字符串替换都是用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的str_replace 和 strtr 比较

          本文链接:https://www.haomeiwen.com/subject/gpbfnltx.html