我必须比较两个字符串的大小写不敏感,一个是更快的strcasecmp()或等于operator
$str1='Hello';
$str2='hello';
//first approach
if($str1 != strotolower($str2))
//do some stuff here
//second approach
if(strcasecmp($str1,$str2) !=0)
//do some stuff here)
哪种方法更好/更快?
答案 0 :(得分:7)
这两种方法的速度都是o(n)但是,使用strtolower会分配一个新的字符串来保存结果,从而增加内存压力并降低性能
答案 1 :(得分:2)
你可以试试这个:
//*********************************
$start1 = microtime(true);
for ($i = 0; $i < 10000000; ++$i) {
if (strcasecmp('STRING1', 'string1') == 0) {}
}
$end1 = microtime(true);
echo 'Time1: ' . ($end1 - $start1) . '<br/>';
//*********************************
$start2 = microtime(true);
for ($i = 0; $i < 10000000; ++$i) {
if (strtolower('STRING1') == strtolower('string1')) {}
}
$end2 = microtime(true);
echo 'Time2: ' . ($end2 - $start2) . '<br/>';
//*********************************
$start3 = microtime(true);
for ($i = 0; $i < 10000000; ++$i) {
if (strtolower('STRING1') == 'string1') {}
}
$end3 = microtime(true);
echo 'Time3: ' . ($end3 - $start3) . '<br/>';
//*********************************
结果:
时间1:2.8758139610291
时间2:4.6863219738007
时间3:2.5191688537598