解析strtr函数的效率问题

  次阅读 来源:互联网(转载协议) 2016-03-02 15:31 我要评论(0)

最近经常要对字符串进行匹配和替换操作,之前一般使用str_replace或者preg_replace,据说strtr的效率不错,所以对比了一下:

复制代码 代码如下:

$i = 0;

$t = microtime(true);

for(;$i<1000;$i++)

{

$str = strtr(md5($i), $p2);

}

var_dump(microtime(true)-$t);//0.085476875305176

$t = microtime(true);

for(;$i<2000;$i++)

{

$str = preg_replace($p, '', md5($i));

}

var_dump(microtime(true)-$t);//0.09863805770874

结果显示,strtr的效率比preg_replace高约15%左右。趁着周末,查看了strtr的php源码

复制代码 代码如下:

PHP_FUNCTION(strtr)

{

zval **str, **from, **to;

int ac = ZEND_NUM_ARGS();

//参数检查(zend_get_parameters_ex函数定义在zend_api.c文件中)

if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &str, &from, &to) == FAILURE) {

WRONG_PARAM_COUNT;

}

//参数检查

if (ac == 2 && Z_TYPE_PP(from) != IS_ARRAY) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument is not an array.");

RETURN_FALSE;

}

convert_to_string_ex(str);

/* shortcut for empty string */

//宏Z_STRLEN_PP定义在zend_operators.h

if (Z_STRLEN_PP(str) == 0) {

RETURN_EMPTY_STRING();

}

if (ac == 2) {

php_strtr_array(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), HASH_OF(*from));

} else {

convert_to_string_ex(from);

convert_to_string_ex(to);

ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);

php_strtr(Z_STRVAL_P(return_value),

Z_STRLEN_P(return_value),

Z_STRVAL_PP(from),

Z_STRVAL_PP(to),

MIN(Z_STRLEN_PP(from),

Z_STRLEN_PP(to)));

}

}

先看看php_strtr函数:

复制代码 代码如下:

//trlen是字符串str_from与str_to的长度的最小值

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)) {

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...