您的位置:首页 > 编程语言 > PHP开发

php 计算字符串长度时间测试

2015-04-24 22:19 204 查看
<?php

$str = "adfa我是0 大大大adf \

";

echo strlen($str),"\n";

while (isset($str{++$i})) {

}

echo $i;

?>

下面是时间测试,不知道为什么每次都是下面一种方法要耗时少,反而strlen耗时多呢?





<?php

$str = "adfa我是0 大大大adf \

";

$start1=microtime(true);

for($a=0;$a<100000;$a++){

strlen($str);

}

echo microtime(true)-$start1,"\n";

$start2=microtime(true);

for($a=0;$a<100000;$a++){

while (isset($str{++$i})) {

}

}

echo microtime(true)-$start2,"\n";

?>

第二个测试里循环内$i没初始化, 只是遍历了一次,其他次数全部都是判断一下就直接跳出了,所以导致2性能比1好

?
这个有bug,空字符窜会返回1,最好改成

?
php生成字符窜的时候会把长度保存到str结构体的len字段上, 而php的strlen并不是遍历,只是取这个字段, 所以效率上绝对远远高过其他方式

首先, strlen() 是函数,而 isset() 是一种语言结构。

从源码上看, strlen()不做任何计算,只返回在 zval 结构中存储的一只字符串长度。函数调用会经过诸多步骤,如字母小写化、哈希查找。isset() 作为一种语言结构,意味着它的执行不需要字母小写化和哈希查找,也就是说,实际上在检验字符串长度的顶层代码中没花太多开销。

所以,在一些情况下,可以使用 isset() 代替 strlen() 来优化代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: