Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Задание: Строка всегда состоит из 4 символов и содержит 3 цифры и последний символ одна буква.
- // Удалите последний символ если он равен 0 или 1. Уделите внимание скорости работы решения.
- error_reporting(E_ALL | E_STRICT); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
- $r1 = 0;
- $r2 = 0;
- $r3 = 0;
- $r4 = 0;
- for($i = 0; $i < 200000; $i++){
- $letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
- $obr = rand(10, 99).array_rand($letters, 1);
- $a = $obr;
- $b = $obr;
- $c = $obr;
- $d = $obr;
- $t1 = microtime(true);
- $a = str_replace(['a', 'b'], '', $a);
- $t2 = microtime(true);
- $b = preg_replace('/[ab]$/', '', $b);
- $t3 = microtime(true);
- if(strstr($c, 'a') || strstr($c, 'b')){
- $c = substr($c, 0, -1);
- }
- $t4 = microtime(true);
- if(substr($d, -1) == 'a' || substr($d, -1) == 'b'){
- $d = substr($d, 0, -1);
- }
- $t5 = microtime(true);
- $r1 += $t2 - $t1;
- $r2 += $t3 - $t2;
- $r3 += $t4 - $t3;
- $r4 += $t5 - $t4;
- }
- echo "str_replace = $r1<br>";
- echo "preg_replace = $r2<br>";
- echo "strstr = $r3<br>";
- echo "substr = $r4<br>";
- // Есть функции, например strstr которые ищут по всей строке, было бы логично предположить, что чем длиннее строка, тем медленнее они будут работать. Сравним строку из 2 чисел + буква на конце и из 12 чисел + буква на конце.
- 3 символа
- str_replace = 0.20726203918457
- preg_replace = 0.23566055297852
- strstr = 0.13849425315857
- substr = 0.17499923706055
- 13 символов
- str_replace = 0.19043135643005
- preg_replace = 0.28733777999878
- strstr = 0.12781095504761
- substr = 0.15781807899475
- // Теперь поменяем положение буквы. Допустим, она стоит в начале строки т.е.
- $obr = array_rand($letters, 1).rand(10, 99);
- // И изменим условия на поиск в начале строки
- $b = preg_replace('/^[ab]/', '', $b);
- if(strstr($c, 'a') || strstr($c, 'b')){
- $c = substr($d, 1, 2);
- }
- if(substr($d, 0, 1) == 'a' || substr($d, 0, 1) == 'b'){
- $d = substr($d, 1, 2);
- }
- // Лидер тот же, а вот preg_replace сравнялся с str_replace и даже немного выигрывает, а substr наоборот просел до их уровня
- // Буква впереди, 3 символа
- str_replace = 0.24239635467529
- preg_replace = 0.23661184310913
- strstr = 0.1604790687561
- substr = 0.23000884056091
Add Comment
Please, Sign In to add comment