$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()慢?
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有一个更大的字符数据库来比较每个字符串字符与检查字符是否为大写时的比较.