我出于好奇而做了一个实验。我想看看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:
在Unicode字符索引中筛选更多数据将不可避免地花费更长的时间。
请记住,strtolower
使用您当前的语言环境,因此,如果您的服务器使用的字符编码不支持特殊字符(例如“Ê”)的strtolower
,它将仅返回特殊字符。但是,已设置UTF-8上的字符映射,可以通过运行mb_strtolower来确认。
还可以将属于uppercase
类别的字符数与您在lowercase
类别中发现的字符数进行比较,但这再次取决于您的字符编码。
简而言之,strtolower
具有更大的字符数据库,用于比较每个单独的字符串字符和何时检查该字符是否为uppercase
。
关于php - 为什么strtolower比strtoupper慢一些?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44782098/