PHP 字符串长度判断效率更高的方法


Posted in PHP onMarch 02, 2014

有经验的程序员发现,php判断字符串长度,使用isset()在速度上比strlen()更快,执行效率更高。
即:

$str = ‘aaaaaa';
if(strlen($str) > 6)
VS
if(!isset($str{6})

用例子简单测试下,情况基本属实,isset()效率几乎是strlen()的3倍。
示例:
<?php
 //使用strlen方式
 $arr = "123456";
 $sTime = microtime(1);
 if(strlen($arr) > 6){
 // echo 1;
 }
 echo microtime(1) -  $sTime;

输出:0.00035595893859863
<?php
//使用isset($arr{})方式
 $arr = "123456";
 $sTime = microtime(1);
 if(!isset($arr{6})){
 // echo "1\r\n";
 }
 echo microtime(1) - $sTime;

输出:0.00019097328186035

isset()速度为什么比strlen()更快
strlen()函数函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。
在某些情况下,使用isset() 技巧可以加速执行你的代码。因为与isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

因此调用isset()比strlen()快。

PHP 相关文章推荐
PHP设计聊天室步步通
Oct 09 PHP
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
redis 队列操作的例子(php)
Apr 12 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
Laravel手动返回错误码示例
Oct 22 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 #PHP
PHP代码优化之成员变量获取速度对比
Feb 28 #PHP
php递归方法实现无限分类实例代码
Feb 28 #PHP
PHP中常用的转义函数
Feb 28 #PHP
PHP中鲜为人知的10个函数
Feb 28 #PHP
php中调用其他系统http接口的方法说明
Feb 28 #PHP
PHP URL参数获取方式的四种例子
Feb 28 #PHP
You might like
把PHP安装为Apache DSO
2006/10/09 PHP
php empty函数 使用说明
2009/08/10 PHP
php依赖注入知识点详解
2019/09/23 PHP
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
javascript常用方法总结
2015/05/14 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
Python字符串转换成浮点数函数分享
2015/07/24 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
妈妈活动方案
2014/08/15 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
学生会招新宣传语
2015/07/13 职场文书
社区干部培训心得体会
2016/01/06 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书