知识大全 解析strtr函数的效率问题
Posted 函数
篇首语:泪水和汗水的化学成分相似,但前者只能为你换来同情,后者却可以为你赢得成功!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 解析strtr函数的效率问题相关的知识,希望对你有一定的参考价值。
最近经常要对字符串进行匹配和替换操作 之前一般使用str_replace或者preg_replace 据说strtr的效率不错 所以对比了一下
复制代码 代码如下: $i = ; $t = microtime(true); for(;$i< ;$i++) $str = strtr(md ($i) $p ); var_dump(microtime(true) $t); // $t = microtime(true); for(;$i< ;$i++) $str = preg_replace($p md ($i)); var_dump(microtime(true) $t); //结果显示 strtr的效率比preg_replace高约 %左右 趁著周末 查看了strtr的php源码
复制代码 代码如下: PHP_FUNCTION(strtr) zval **str **from **to; int ac = ZEND_NUM_ARGS(); //参数检查(zend_get_parameters_ex函数定义在zend_api c文件中) if (ac < || ac > || zend_get_parameters_ex(ac &str &from &to) == FAILURE) WRONG_PARAM_COUNT; //参数检查 if (ac == && 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) == ) RETURN_EMPTY_STRING(); if (ac == ) 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) ); 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[ ]; // if ((trlen < ) || (len < )) return str; //xlat的下标与值相等 for (i = ; i < ; xlat[i] = i i++); //把from到to字符串的每一个字符对应起来 例如 from="ab" to="cd" 则会产生这样的对应 a => c b => d for (i = ; i < trlen; i++) xlat[(unsigned char) str_from[i]] = str_to[i]; //替换(不过觉得这个函数的效率还有可以改进的地方 因为如果需要替换的字符只是占整个字符串很少的部分 这样就有大部分的赋值操作其实并没有什么意义 这样的情况下感觉先判断再赋值感觉会高效一点 有空测试一下) for (i = ; i < len; i++) str[i] = xlat[(unsigned char) str[i]]; return str;可见 在处理strtr( abcdaaabcd ab efd )这样的操作时 应该是很高效的 (注意 这个操作输出efcdeeefcd) 再看看php_strtr_array
复制代码 代码如下: cha138/Article/program/PHP/201311/21131相关参考
这几天在做一个东西研究PHP读取行数较多的文件(大概上百万行)考虑到效率问题进行了简单的研究总结如下 第一条file()函数的效率问题 file()函数的效率很底下如果是有规律的文件比如每行一
知识大全 php连接函数implode与分割explode的深入解析
目前学习php的人有很多很多进行php培训的朋友在学习中总会问到这样一个问题:php连接函数implode是什么呢?php可以将字符串分割成数组同时翻过了也可以将数组连接成字符串确切的说是可以将数
公平是“分蛋糕”的问题,效率是“做大蛋糕”的问题,二者是绝对矛盾的
公平是“分蛋糕”的问题,效率是“做大蛋糕”的问题,二者是绝对矛盾的。_____答案:错误解析:公平是“分蛋糕”的问题,效率是“做大蛋糕”的问题,但两者不是绝对矛盾的。在分配中如果合理地处理效率和公平的
知识大全 根据下列条件分别求二次函数的解析式; ⑴已知二次函数的图象经过〔-2,-1〕且当X=-1时,函数
根据下列条件分别求二次函数的解析式;⑴已知二次函数的图象经过〔-2,-1〕且当X=-1时,函数 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理
解析PHP函数array 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们都知道PHP中的数组
php函数method_exists()与is_callable()的区别在哪?在php面相对象设计过程中往往我们需要在调用某一个方法是否属于某一个类的时候做出判断常用的方法有method_exist
解析出sql语句 functionTFormgensqls(AdoCon:TADOConnection;pdelta:OleVariant;constptablenamepkeyfields:W
实例解析C++/CLI之静态构造函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!就某些类而言当在
SQL2005CLR函数扩展-解析天气服务的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
采用js对URL中的汉字进行escape编码<ahref=""onclick="windowopen(product_listphp?p_sort=+escape(脚本之家));">这