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.ini中文版(2)
Oct 09 PHP
一篇入门的php Class 文章
Apr 04 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
php5.x禁用eval的操作方法
Oct 19 PHP
PHP chop()函数讲解
Feb 11 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
PHP高并发和大流量解决方案整理
Mar 09 PHP
thinkphp 获取控制器及控制器方法
Apr 16 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学习之function的用法
2012/07/14 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
基于python编写的微博应用
2014/10/17 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
利用python求相邻数的方法示例
2017/08/18 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python输出指定字符串的方法
2020/02/06 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
如何利用Python 进行边缘检测
2020/10/14 Python
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
商务英语专业自荐信
2013/10/14 职场文书
餐厅总厨求职信
2014/03/04 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
2015年消防工作总结
2015/04/24 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
python 对图片进行简单的处理
2021/06/23 Python
bose降噪耳机音能消除人声吗
2022/04/19 数码科技