6

usingstrlen实际上是通过遍历字符串来计算字符串中的字节数,还是简单地从索引中返回已经计算出的字符串长度的值?

我的问题的原因是因为我可以选择为速度敏感的脚本存储非常长的字符串的预先计算值,或者我可以使用该strlen函数并节省自己的编码时间。

但我实际上想知道它是如何strlen工作的,因为我往往非常依赖它,也许这不是一个好主意?

更新

请参阅下面的基准。

4

1 回答 1

7

搞砸了,我做了一个基准测试:

<?php
$shortstring='hello';

$longstring='long';
for($run=0;$run<100000;$run++)
    $longstring.='dsffghdgfhdsda'.rand(1000,2000);

$time=microtime(true);
for($run=0;$run<100000000;$run++)
    $temp=strlen($shortstring);
$time=microtime(true)-$time;

echo "strlen on short string took $time seconds\n";

$time=microtime(true);
for($run=0;$run<100000000;$run++)
    $temp2=strlen($longstring);
$time=microtime(true)-$time;

echo "strlen on long string took $time seconds\n";

结果

strlen on short string took 12.508891820908 seconds
strlen on long string took 11.897696971893 seconds

它显然不会遍历字符串,而是返回一个预先索引的值。速度没有区别。

于 2013-03-02T07:04:27.247 回答