Measure the speed of str_replace
, strtr
, and preg_replace
with strings of different lengths and number of replacements.
The times for preg_replace
were omitted because it is almost always higher than the other functions. strtr
generally outperforms str_replace
except where the string changes length.
<?php $ITER = 100000; $short5 = "abcde:abcde"; $short2 = "ab:cdeabcde"; $short8 = "abcdeabc:de"; $short28 = "ab:cdeabc:de"; $short258 = "ab:cde:abc:de"; $shortmany = "a:b:c:d:e:f"; $med5 = str_repeat("abcde",2).':'.str_repeat("abcde",3); $med2 = str_repeat("abcde",1).':'.str_repeat("abcde",4); $med8 = str_repeat("abcde",4).':'.str_repeat("abcde",1); $med28 = str_repeat("abcde",1).':'.str_repeat("abcde",3).':'.str_repeat("abcde",1); $med258 = str_repeat("abcde",1).':'.str_repeat("abcde",2).':'.str_repeat("abcde",2).':'.str_repeat("abcde",1); $medmany = str_repeat("a:b:c:d:e:",4).'f'; $long5 = str_repeat("abcde",20).':'.str_repeat("abcde",20); $long2 = str_repeat("abcde",8).':'.str_repeat("abcde",32); $long8 = str_repeat("abcde",32).':'.str_repeat("abcde",8); $long28 = str_repeat("abcde",8).':'.str_repeat("abcde",24).':'.str_repeat("abcde",8); $long258 = str_repeat("abcde",8).':'.str_repeat("abcde",12).':'.str_repeat("abcde",12).':'.str_repeat("abcde",8); $longmany = str_repeat("a:b:c:d:e:",20).'f'; print("\t"); print("short5\tshort2\tshort8\tshort28\tshort258\tshort-many\t"); print("med5\tmed2\tmed8\tmed28\tmed258\tmed-many\t"); print("long5\tlong2\tlong8\tlong28\tlong258\tlong-many\n"); function runtest($func){ global $short5,$short2,$short8,$short28,$short258,$shortmany; global $med5,$med2,$med8,$med28,$med258,$medmany; global $long5,$long2,$long8,$long28,$long258,$longmany; $func($short5); $func($short2); $func($short8); $func($short28); $func($short258); $func($shortmany); $func($med5); $func($med2); $func($med8); $func($med28); $func($med258); $func($medmany); $func($long5); $func($long2); $func($long8); $func($long28); $func($long258); $func($longmany); print("\n");flush(); } function test0($s){ $a = str_replace(':','/',$s); $b = strtr($s,':','/'); $c = preg_replace('/:/','/',$s); if($a!=$b || $b!=$c){ print("str_replace: $a\nstrtr: $b\npreg_replace: $c\n"); exit(1); } $a = str_replace(array('a','e'),array('_','_'),$s); $b = strtr($s,array('a'=>'_','e'=>'_')); $bb = strtr($s,'ae','__'); $c = preg_replace('/[ae]/','_',$s); if($b!=$bb){ print("strtr1: $b\nstrtr2: $bb\n\n"); exit(1); } if($a!=$b || $b!=$c){ print("str_replace: $a\nstrtr: $b\npreg_replace: $c\n"); exit(1); } $a = str_replace(':','%3A',$s); $b = strtr($s,array(':'=>'%3A')); $c = preg_replace('/:/','%3A',$s); if($a!=$b || $b!=$c){ print("str_replace: $a\nstrtr: $b\npreg_replace: $c\n"); exit(1); } $a = str_replace(array(':','/'),array('%3A','%2F'),$s); $b = strtr($s,array(':'=>'%3A','/'=>'%2F')); if($a!=$b){ print("str_replace: $a\nstrtr: $b\n"); exit(1); } $a = str_replace('de','',$s); $b = strtr($s,array('de'=>'')); $c = preg_replace('/de/','',$s); if($a!=$b || $b!=$c){ print("str_replace: $a\nstrtr: $b\npreg_replace: $c\n"); exit(1); } } function test1($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = str_replace(':','/',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test2($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = strtr($s,':','/'); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test3($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = preg_replace('/:/','/',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test4($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = str_replace(array('a','e'),array('_','_'),$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test5($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = strtr($s,array('a'=>'_','e'=>'_')); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test6($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = strtr($s,'ae','__'); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test7($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = preg_replace('/[ae]/','_',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test8($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = str_replace(':','%3A',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test9($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = strtr($s,array(':'=>'%3A')); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test10($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = preg_replace('/:/','%3A',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test11($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = str_replace(array(':','/'),array('%3A','%2F'),$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test12($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = strtr($s,array(':'=>'%3A','/'=>'%2F')); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test13($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = str_replace('de','',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test14($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = strtr($s,array('de'=>'')); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } function test15($s){ global $ITER; $t1 = xdebug_time_index(); for($i=0;$i<$ITER;$i++){ $b = preg_replace('/de/','',$s); } $t2 = xdebug_time_index(); print("\t");print($t2-$t1);flush(); } print('"single str_replace"');flush(); runtest('test1'); print('"single strtr"');flush(); runtest('test2'); print('"single preg_match"');flush(); runtest('test3'); print('"multi str_replace"');flush(); runtest('test4'); print('"multi strtr"');flush(); runtest('test6'); print('"multi strtr array"');flush(); runtest('test5'); print('"multi preg_replace"');flush(); runtest('test7'); print('"lengthen str_replace"');flush(); runtest('test8'); print('"lengthen strtr"');flush(); runtest('test9'); print('"lengthen preg_replace"');flush(); runtest('test10'); print('"lengthen multi str_replace"');flush(); runtest('test11'); print('"lengthen multi strtr"');flush(); runtest('test12'); print('"shorten str_replace"');flush(); runtest('test13'); print('"shorten strtr"');flush(); runtest('test14'); print('"shorten preg_replace"');flush(); runtest('test15');