我出于好奇而做了一个实验。我想看看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 worldHELLO WORLDHello WorldHere 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:



在Unicode字符索引中筛选更多数据将不可避免地花费更长的时间。

请记住,strtolower使用您当前的语言环境,因此,如果您的服务器使用的字符编码不支持特殊字符(例如“Ê”)的strtolower,它将仅返回特殊字符。但是,已设置UTF-8上的字符映射,可以通过运行mb_strtolower来确认。

还可以将属于uppercase类别的字符数与您在lowercase类别中发现的字符数进行比较,但这再次取决于您的字符编码。

简而言之,strtolower具有更大的字符数据库,用于比较每个单独的字符串字符和何时检查该字符是否为uppercase

关于php - 为什么strtolower比strtoupper慢一些?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44782098/

10-12 16:10