strtr和str_replace效率探索
来源:互联网 发布:手持式网络测试仪 编辑:程序博客网 时间:2024/06/08 09:02
今天写代码用到字符串规制,就上网查了下strtr与str_replace的效率如何,网上一些地方说strtr比str_replace快四倍。半信半疑,自己就做了下测试。
strtr比较怪异,用法这里不提。只做两种这两个函数可以替换用的测试例子。
第一种
list( $usec, $sec ) = explode(' ', microtime() );$star = $usec+$sec;$string = 'paocaiasdfsadfasdfasdfasdfasdfasdfasdfasdfasdfpaocaiasdfsadfasdfasdfasdfasdfasdfasdfasdfasdfpaocaiasdfsadfasdfasdfasdfasdfasdfas!';$aa = array('pao'=>'a');for($i=1; $i<= 10000; $i++ ){ $sssss = strtr( $string, $aa ); }list( $usec, $sec ) = explode(' ', microtime() );$end = $usec+$sec;echo 'strtr用时:'.($end-$star);echo "<br>";list( $usec, $sec ) = explode(' ', microtime() );$star = $usec+$sec;for($i=1; $i<= 10000; $i++ ){ $sssss = str_replace('pao', 'a', $string ); }list( $usec, $sec ) = explode(' ', microtime() );$end = $usec+$sec;echo 'str_replace用时:'.($end-$star);echo "<br>";exit;结果如下:
strtr用时:0.10797691345215
str_replace用时:0.020326137542725
第二种
$string = 'absdfddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd';list( $usec, $sec ) = explode(' ', microtime() );$star = $usec+$sec;for($i=1; $i<= 100000; $i++ ){ $sssss = strtr( $string, 'ab', '01');}list( $usec, $sec ) = explode(' ', microtime() );$end = $usec+$sec;echo 'strtr用时:'.($end-$star);echo "<br>";list( $usec, $sec ) = explode(' ', microtime() );$star = $usec+$sec;for($i=1; $i<= 100000; $i++ ){ $sssss = str_replace( 'ab', '01', $string);}list( $usec, $sec ) = explode(' ', microtime() );$end = $usec+$sec;echo 'str_replace用时:'.($end-$star);echo "<br>";exit;
结果如下:
strtr用时:0.20317006111145
str_replace用时:0.14615988731384
以上两个测试用时,随着$string变大和for循环变大,strtr用时会比str_replace用时越来越多,for循环达到百万级时,strtr用时是str_replace用时的四倍,无语了。
以下是strtr源码,可能strtr在其他使用例子上是比较快,但是不能和str_replace做比较。
/* {{{ 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 0
- strtr和str_replace效率探索
- 比较strtr, str_replace和preg_replace的效率
- 比较strtr, str_replace和preg_replace三个函数的效率
- 关于str_replace和strtr函数
- PHP中strtr和str_replace比较
- PHP中strtr()和str_replace()的区别
- php中strtr和str_replace的坑
- 关于PHP中的strtr和str_replace使用
- PHP替换字符串函数strtr()和str_replace()
- php中strtr和str_replace的坑
- 数组方式下比较strtr, str_replace的效率
- str_replace()、preg_replace()、strtr()三者的区别和用法
- strtr与str_replace的区别
- strtr函数的效率问题
- PHP str_replace() 函数 & strtr() 函数 的常见用法
- PHP strtr与str_replace函数性能简单测试
- php字符串处理 (据说,strtr 比 str_replace 替换速度快四倍)
- strtr函数的乱码及效率问题(2)
- apache+nagios+pnp4nagios(Client 安装配置)
- ActionScript不断旋转的椭圆
- Struts 2中实现文件下载
- mysql修改表默认字符集可能带来的隐患
- jquery滚动元素
- strtr和str_replace效率探索
- VS2010 常用快捷键
- IOS开发 通过NSDateComponents和NSCalendar定义NSDate
- opencv CvSeq学习
- XFree86-4.6.0全编译
- Linux之静态库,动态库,动态加载库
- 移动应用设计中应避免的十种错误
- android browser 的几个小feature (五) Android Browser带网络认证的下载实现
- Android SimpleAdapter 的list刷新问题。