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 相关文章推荐
PHP5 安装方法
Jan 15 PHP
一个数据采集类
Feb 14 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 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服务器实现多session并发运行
2006/10/09 PHP
php 中英文语言转换类代码
2011/08/11 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python实现多线程抓取知乎用户
2016/12/12 Python
python之PyMongo使用总结
2017/05/26 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
兼职业务员岗位职责
2014/01/01 职场文书
4s店活动策划方案
2014/08/25 职场文书
接收函格式
2015/01/30 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
党小组推荐意见
2015/06/02 职场文书
八一建军节主持词
2015/07/01 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
为什么不建议在go项目中使用init()
2021/04/12 Golang
java设计模式--建造者模式详解
2021/07/21 Java/Android
Oracle 多表查询基本语法实例
2022/04/18 Oracle
Java Spring Lifecycle的使用
2022/05/06 Java/Android