解析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!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...