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 表单提交给自己
Jul 24 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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中并发读写文件冲突的解决方案
2013/10/25 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
最常用的12种设计模式小结
2011/08/09 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
详解python3中的真值测试
2018/08/13 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
营销部内勤岗位职责
2014/04/30 职场文书
学生手册评语
2014/05/05 职场文书
2014年标准化工作总结
2014/12/17 职场文书
运动会致辞稿
2015/07/29 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
python 如何用terminal输入参数
2021/05/25 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android