加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – 为什么strtolower比strtoupper略慢?

发布时间:2020-05-25 09:20:28 所属栏目:PHP 来源:互联网
导读:我出于好奇做了一个实验.我想看看strtolower()和strtoupper()之间是否存在微观差异.我预计strtolower()在大多数小写字符串上会更快,反之亦然.我发现strtolower()在所有情况下都较慢(尽管在你完成数百万次之前完全无关紧要.)这是我的测试. $string = hello wor

我出于好奇做了一个实验.我想看看strtolower()和strtoupper()之间是否存在微观差异.我预计strtolower()在大多数小写字符串上会更快,反之亦然.我发现strtolower()在所有情况下都较慢(尽管在你完成数百万次之前完全无关紧要.)这是我的测试.

$string = 'hello world';
$start_time = microtime();
for ($i = 0; $i < 10000000; $i++) {
    strtolower($string);
}
$timed = microtime() - $start_time;
echo 'strtolower ' . $string . ' - ' . $timed . '<br>';

重复strtolower()和strtoupper()与hello world,HELLO WORLD和Hello World. Here is the full gist.我已经多次运行代码并且得到大致相同的结果.这是下面的一次测试.

strtolower hello world - 0.043829
strtoupper hello world - 0.04062
strtolower HELLO WORLD - 0.042691
strtoupper HELLO WORLD - 0.015475
strtolower Hello World - 0.033626
strtoupper Hello World - 0.017022

我相信控制它的php-src github中的C代码在这里是strtolower(),这里是strtoupper()

要清楚,这不会阻止我使用strtolower().我只是想了解这里发生了什么.

为什么strtolower()比strtoupper()慢?

它主要取决于您当前使用的字符编码,但速度差异的主要原因是特殊字符的每个编码字符的大小.

摘自babelstone.co.uk:

For example,lowercase j with caron () is represented as a single encoded character (U+01F0 LATIN SMALL LETTER J WITH CARON),but the corresponding uppercase character (J) is represented in Unicode as a sequence of two encoded characters (U+004A LATIN CAPITAL LETTER J + U+030C COMBINING CARON).

要在Unicode字符索引中筛选的更多数据将不可避免地需要更长的时间.

请记住,strtolower使用您当前的区域设置,因此如果您的服务器使用的字符编码不支持特殊字符的strtolower(例如’’),它将只返回特殊字符.但是,设置了UTF-8上的字符映射,可以通过运行mb_strtolower来确认.

还可以比较属于大写类别的字符数与您在小写类别中找到的数量,但再次,这取决于您的字符编码.

简而言之,strtolower有一个更大的字符数据库来比较每个字符串字符与检查字符是否为大写时的比较.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读