zero50x

С PHP быстрое удаление последних символов

Jan 30th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.95 KB | None | 0 0
  1. // Задание: Строка всегда состоит из 4 символов и содержит 3 цифры и последний символ одна буква.
  2. // Удалите последний символ если он равен 0 или 1. Уделите внимание скорости работы решения.
  3.  
  4. error_reporting(E_ALL | E_STRICT); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
  5.  
  6. $r1 = 0;
  7. $r2 = 0;
  8. $r3 = 0;
  9. $r4 = 0;
  10.  
  11. for($i = 0; $i < 200000; $i++){
  12.     $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'];
  13.     $obr = rand(10, 99).array_rand($letters, 1);
  14.    
  15.     $a = $obr;
  16.     $b = $obr;
  17.     $c = $obr;
  18.     $d = $obr;
  19.  
  20.     $t1 = microtime(true);
  21.  
  22.         $a = str_replace(['a', 'b'], '', $a);
  23.  
  24.     $t2 = microtime(true);
  25.  
  26.         $b = preg_replace('/[ab]$/', '', $b);
  27.  
  28.     $t3 = microtime(true);
  29.  
  30.         if(strstr($c, 'a') || strstr($c, 'b')){
  31.             $c = substr($c, 0, -1);
  32.         }
  33.  
  34.     $t4 = microtime(true);
  35.  
  36.         if(substr($d, -1) == 'a' || substr($d, -1) == 'b'){
  37.             $d = substr($d, 0, -1);
  38.         }
  39.  
  40.     $t5 = microtime(true);
  41.  
  42.     $r1 += $t2 - $t1;
  43.     $r2 += $t3 - $t2;
  44.     $r3 += $t4 - $t3;
  45.     $r4 += $t5 - $t4;
  46. }
  47.  
  48. echo "str_replace = $r1<br>";
  49. echo "preg_replace = $r2<br>";
  50. echo "strstr = $r3<br>";
  51. echo "substr = $r4<br>";
  52.  
  53. // Есть функции, например strstr которые ищут по всей строке, было бы логично предположить, что чем длиннее строка, тем медленнее они будут работать. Сравним строку из 2 чисел + буква на конце и из 12 чисел + буква на конце.
  54.  
  55. 3 символа
  56. str_replace = 0.20726203918457
  57. preg_replace = 0.23566055297852
  58. strstr = 0.13849425315857
  59. substr = 0.17499923706055
  60.  
  61. 13 символов
  62. str_replace = 0.19043135643005
  63. preg_replace = 0.28733777999878
  64. strstr = 0.12781095504761
  65. substr = 0.15781807899475
  66.  
  67. // Теперь поменяем положение буквы. Допустим, она стоит в начале строки т.е.
  68.  
  69. $obr = array_rand($letters, 1).rand(10, 99);
  70.  
  71. // И изменим условия на поиск в начале строки
  72.  
  73.         $b = preg_replace('/^[ab]/', '', $b);
  74.  
  75.         if(strstr($c, 'a') || strstr($c, 'b')){
  76.             $c = substr($d, 1, 2);
  77.         }
  78.  
  79.         if(substr($d, 0, 1) == 'a' || substr($d, 0, 1) == 'b'){
  80.             $d = substr($d, 1, 2);
  81.         }
  82.  
  83. // Лидер тот же, а вот preg_replace сравнялся с str_replace и даже немного выигрывает, а substr наоборот просел до их уровня
  84.  
  85. // Буква впереди, 3 символа
  86. str_replace = 0.24239635467529
  87. preg_replace = 0.23661184310913
  88. strstr = 0.1604790687561
  89. substr = 0.23000884056091
Add Comment
Please, Sign In to add comment