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 移除数组重复元素的一点说明
Nov 27 PHP
php 冒泡排序 交换排序法
May 10 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP中Enum(枚举)用法实例详解
Dec 07 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
Mar 23 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
PHP实现15位身份证号转18位的方法分析
Oct 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
使用无限生命期Session的方法
2006/10/09 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
餐厅经理岗位职责范本
2014/02/17 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
寄语学生的话
2014/04/10 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
课程设计的心得体会
2014/09/03 职场文书
2014年人事部工作总结
2014/12/03 职场文书
给病人的慰问信
2015/03/23 职场文书
护士心得体会范文
2016/01/25 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
springboot读取resources下文件的方式详解
2022/06/21 Java/Android