Мне нужно сравнить две строки для нечувствительного к регистру равенства, которое быстрее strcasecmp () или равно оператору
$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)
какой подход лучше / быстрее?
Оба подхода – o (n) в скорости, однако usign strtolower выделяет новую строку для хранения результата, что, в свою очередь, увеличивает давление памяти и снижает производительность
Вы можете попробовать следующее:
//********************************* $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