PHP 字符串长度判断效率更高的方法

 在php里当需要判断一个字符串长度时,我们首先想到的是strlen()函数,不错,strlen()返回的就是字符串的长度,这样使用没有任何问题。不过,如果要从php程序优化的角度来看,使用strlen()判断字符串长度未免是最好的写法

有经验的程序员发现,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 "1rn";
 }
 echo microtime(1) - $sTime;
 
输出:0.00019097328186035
 
isset()速度为什么比strlen()更快
strlen()函数函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。
在某些情况下,使用isset() 技巧可以加速执行你的代码。因为与isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
 
因此调用isset()比strlen()快。

时间: 2024-11-08 17:39:40

PHP 字符串长度判断效率更高的方法的相关文章

for-关于循环这两个代码哪个效率更高?

问题描述 关于循环这两个代码哪个效率更高? 代码1: i=0; while(1) { for(i=0;i<25;i++) { a=1; } for(;i<50;i++) { a=0; } i=0; } 代码2: i=0; while(1) { i++; switch(i) { case 1: a=1; break; case 25: a=0; break; case 50: i=0; break; } } 解决方案 回复chezunyin: 不好说,不同的处理器执行不同的指令花费的时间不同,这

const 和enum 谁效率更高,占用资源更少

问题描述 const 和enum 谁效率更高,占用资源更少 asp.net 中 const 和enum 谁效率更高,占用资源更少 解决方案 这个应该区别不大

mysql-MySql和oracle的区别有哪些?哪个效率更高,是Oracle吗?

问题描述 MySql和oracle的区别有哪些?哪个效率更高,是Oracle吗? MySql和oracle的区别有哪些?哪个效率更高,是Oracle吗?如果是oracle效率更高,那怎么样让Mysql的效率比oracle更高? 解决方案 数据量小的用mysql,大的就用oracle吧 解决方案二: 数据库发展到现在,谁也没有什么"独门秘笈"了.这意味着其实各大数据库系统的效率其实差不多.但是一个好的dba写的查询可以比一个差的dba快100倍.算法和查询的写法才是你要关注的东西. 解决

iPad将成为美国国会效率更高的利器

近日有消息称,美国众议院议员亨利·库勒(Henry Cuellar)近期在发表演说时携带了自己的iPad,这或许将改变美国国会的传统. 美国众议院议员此前大多拒绝使用科技产品.反对者认为,在国会中使用科技产品将带来麻烦,尤其考虑到国会议员的人数很多. 库勒周四在接受采访时谈到了为何使用iPad.他表示:"如果你去了解可以使用的技术,并以合适的方式利用这些技术,那么可以使国会的效率更高.通过iPad,我们可以获得许多即时信息."库勒表示,iPad可以用于实时地做研究,或是下载账单.他表示

对象-Dbhelper save 和 update哪一个效率更高

问题描述 Dbhelper save 和 update哪一个效率更高 public void updateUser(int id, int time, String password) throws Exception { // 根据用户id查询用户 User user = getUser(id); // time==1,需要更新系统时间 if (time == 1) { user.setLast_vist_time(DateUtil.formatDate(new Date())); ; } /

杏树林CEO张遇升:通过移动互联网让医生工作效率更高

图为杏树林创始人兼CEO张遇升 &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 投资界6月20日消息,在清科集团主办的"第三届中国医疗1152.html">健康产业投资大会"上,杏树林CEO张遇升表示,杏树林要解决的问题是怎么样能够通过现代移动互联网的技术手段让医生的工作效率更高,能够提高他的工作轻松. 以下是演讲实录: 张遇升:我是杏树林的张遇升,我自己学医出身,以前是在协和

《C和C++程序员面试秘笈》——1.4 i++与++i哪个效率更高

1.4 i++与++i哪个效率更高 C和C++程序员面试秘笈考点: i++和++i的效率比较 出现频率: [解析] 在这里声明,简单地比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案.首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单地用于增加一员操作数,答案是明确的,前缀法和后缀法没有任何区别,编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁地在二者之间制造任何差异.我们看看下面这个程序. #include <s

探讨++i与i++哪个效率更高_C 语言

答案: 在内建数据类型的情况下,效率没有区别: 在自定义数据类型的情况下,++i效率更高! 分析: (自定义数据类型的情况下) ++i返回对象的引用: i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数. (重载这两个运算符如下) 复制代码 代码如下: #include <iostream>using namespace std; class MyInterger{public:    long m_data;public:    MyInter

3种使公司业务效率更高的办法

工作环境正在历经着变迁已不是什么秘密.我们该如何工作.如何完成团队协作.又该如何相互交流?的确,现如今我们的工作被越来越多的被日新月异的高科技工具来代替,以提高我们的工作效率.然而,当我们陷入与电子邮件为伴后为什么会和现实的工作越来越远?我们到底失去了什么?前不久,一些企业领袖从美国各地聚集在芝加哥,参加芝加哥创意周的活动.在此,他们讨论了该如何在未来的工作中做得更好.更有效率.接下来,我们将向你介绍,他们提供的摆脱在办公室里低效工作的秘诀.贾斯延·罗森斯泰因,是旧金山Asana软件公司的创始人