我好像总是提反对意见......再来一次.楼上好像都默认楼主说的"strtr比str_replace快四倍"的说法是正确的.... 现在网上搜了一下, 英文的没有找到这种说法, 中文的有不少,不过大部分都加了"据说"二字,然后在机器上试了一下:php -r ' echo microtime(true);for($i=0;$i<10000;$i++){ $x=strtr("just a test",array("test"=>"TEST")); }; echo "\n".$x."\n".microtime(true); '1304349351.8423 just a TEST 1304349351.8648php -r ' echo microtime(true);for($i=0;$i<10000;$i++){ $x=str_replace("test","TEST","just a test"); } echo "\n".$x."\n".microtime(true); '1304349393.8981 just a TEST 1304349393.9116好像.....没有....四倍...那么多....而且好像str_replace更快??! 我不敢就这么简单测试了就说这个说法错了,但是大家都在机子上试试吧, 欢迎给出更多的测试例子和结果
贴出strtr的字符串替换源代码/* {{{ php_strtr */ PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen) { int i; unsigned char xlat[256]; if ((trlen < 1) || (len < 1)) { return str; } for (i = 0; i < 256; xlat[i] = i, i++); for (i = 0; i < trlen; i++) { xlat[(unsigned char) str_from[i]] = str_to[i]; } for (i = 0; i < len; i++) { str[i] = xlat[(unsigned char) str[i]]; } return str; } /* }}} */这个替换的原理就是,生成0-255的字码表,然后从字码表中找出相应的内容,也就是说仅仅是字母对应, 例如echo strtr("baabbaab", "ab", "01"),"\n"; 意味着 所有的a 等于 0 所有的b 等于 1, 也就是 10011001,这个肯定是相当的快而数组strtr的数组则是另外一个算法,是要按照字母所在的顺序而替换的,例如echo strtr("baabbaab", array("ab"=>"01")),"\n";意味着仅仅只有'ab' 等于 01, 也就是 ba01ba01同理 str_replace也是需要根据字母顺序进行替换
现在网上搜了一下, 英文的没有找到这种说法, 中文的有不少,不过大部分都加了"据说"二字,然后在机器上试了一下:php -r ' echo microtime(true);for($i=0;$i<10000;$i++){ $x=strtr("just a test",array("test"=>"TEST")); }; echo "\n".$x."\n".microtime(true); '1304349351.8423
just a TEST
1304349351.8648php -r ' echo microtime(true);for($i=0;$i<10000;$i++){ $x=str_replace("test","TEST","just a test"); } echo "\n".$x."\n".microtime(true); '1304349393.8981
just a TEST
1304349393.9116好像.....没有....四倍...那么多....而且好像str_replace更快??!
我不敢就这么简单测试了就说这个说法错了,但是大家都在机子上试试吧, 欢迎给出更多的测试例子和结果
*/
PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen)
{
int i;
unsigned char xlat[256]; if ((trlen < 1) || (len < 1)) {
return str;
} for (i = 0; i < 256; xlat[i] = i, i++); for (i = 0; i < trlen; i++) {
xlat[(unsigned char) str_from[i]] = str_to[i];
} for (i = 0; i < len; i++) {
str[i] = xlat[(unsigned char) str[i]];
} return str;
}
/* }}} */这个替换的原理就是,生成0-255的字码表,然后从字码表中找出相应的内容,也就是说仅仅是字母对应,
例如echo strtr("baabbaab", "ab", "01"),"\n"; 意味着 所有的a 等于 0 所有的b 等于 1, 也就是 10011001,这个肯定是相当的快而数组strtr的数组则是另外一个算法,是要按照字母所在的顺序而替换的,例如echo strtr("baabbaab", array("ab"=>"01")),"\n";意味着仅仅只有'ab' 等于 01, 也就是 ba01ba01同理 str_replace也是需要根据字母顺序进行替换
无论怎样测试 strtr 的速度都不快于 str_replace。
当 str_replace 的第1、2个参数均为数组时,速度才与 strtr 相同