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编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
php常用Stream函数集介绍
2013/06/24 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
js中apply与call简单用法详解
2017/11/06 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python logging添加filter教程
2019/12/24 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
中学老师的自我评价
2013/11/07 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis