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

yipeiwu_com5年前PHP代码库

有经验的程序员发现,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()快。

相关文章

ucenter中词语过滤原理分析

本文分析了ucenter中词语过滤原理。分享给大家供大家参考,具体如下: 过滤词语表: id admin find r...

PHP微信开发用Cache 解决数据缓存

用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set、get一下就完了。现在没框架可用了,只好自己动手写一个cache暂时用。 这个...

简单谈谈php中的unicode和utf8编码

简单谈谈php中的unicode和utf8编码

重新认识unicode和utf8编码 直到今天,准确的说是刚才,我才知道UTF-8编码和Unicode编码是不一样的,是有区别的囧 他们之间是有一定的联系的,看看他们的区别: UTF-8...

CodeIgniter上传图片成功的全部过程分享

最近几天正在做一个小型CMS,用到图片上传了,想利于CodeIgniter的上传类去实现,但测试中有好多问题,我把经过和要注意的地方分享一下!复制代码 代码如下:<?php ech...

php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍

shuffle()定义和用法 shuffle() 函数把数组中的元素按随机顺序重新排列。 若成功,则返回 TRUE,否则返回 FALSE。 注释:本函数为数组中的单元赋予新的键名。这将删...