第一个区别:
之间不同的行为的一个有趣的例子
strtr,并
str_replace在PHP手册的注释部分:
<?php$arrFrom = array("1","2","3","B");$arrTo = array("A","B","C","D");$word = "ZBB2";echo str_replace($arrFrom, $arrTo, $word);?>- 结果是:“ ZDDB”
- 但是,此返回:“ ZDDD”(因为根据我们的数组,B = D)
要使此工作有效,请改用“ strtr”:
<?php$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");$word = "ZBB2";echo strtr($word,$arr);?>- 这将返回:“ ZDDB”
这意味着这
str_replace是一种更具全局性的替换方法,而
strtr只是简单地逐个转换字符。
另一个区别:
给定以下代码(摘自PHP字符串替换速度比较):
<?php$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);?>结果文本行将是:
字符串(3)“ PHP”
字符串(27)“ PHP:超文本预处理器”
主要说明:
发生这种情况是因为:
strtr :按长度降序对参数进行排序,因此:
- 它会给最大的那个“更重要”,然后,由于主题文本本身就是替换数组的最大键,因此它被翻译了。
- 因为已替换了主题文本的所有字符,所以该过程到此结束。
str_replace :它按定义键的顺序工作,因此:
它在主题文本中找到键“ PHP”,并将其替换为:“ PHP:超文本预处理器”,其结果如下:
“ PHP:超文本预处理器:超文本预处理器”。
2. 然后在上一步的结果文本中找到下一个键:“ PHP:超文本预处理器”,因此将其替换为“ PHP”,其结果为:
“ PHP:超文本预处理器”。
3. 没有更多要查找的键,因此替换到此结束。



