Home > Backend Development > PHP Tutorial > Compare the efficiency of strtr, str_replace and preg_replace_PHP tutorial

Compare the efficiency of strtr, str_replace and preg_replace_PHP tutorial

WBOY
Release: 2016-07-21 15:02:39
Original
830 people have browsed it

The source code of strtr has been analyzed before. Now let’s compare the efficiency of strtr, str_replace and preg_replace:

Copy the code The code is as follows:

$str =
'1111111100000000000000000000000000000111000001000100010000010010000010010000010100000010
';
$str = str_repeat($str, 1);
$pattern1 = array('12345'=>'', '67891'= >'');
$pattern2 = array('a'=>'', '1234567890'=>'');
$pattern3 = '/12345|67891/';
$pattern4 = '/a|1234567890/';
$pattern5 = array('12345', '67891');
$pattern6 = array('a', '1234567890');
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
strtr($str, $pattern1);
}
echo microtime( true)-$t, "/n"; //0.21915886878967 0.47268319129944
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
strtr($str, $pattern2);
}
echo microtime(true)-$t, "/n"; //0.4768660068512 2.7257590293884
$t = microtime(true);
for ($i=0; $i<10000; $i++)
{
preg_replace($pattern3, '', $str);
}
echo microtime(true)-$t, " /n"; //0.30504012107849 1.0864448547363
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
preg_replace($pattern4, ' ', $str);
}
echo microtime(true)-$t, "/n"; //0.30298089981079 1.117014169693
$t = microtime(true); 0; $i<10000; $i++)
{
str_replace($pattern5, '', $str);
}
echo microtime(true)-$t, "/n"; //0.18029189109802 0.22510504722595
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
str_replace($pattern6, '', $str ; When it is 8, the second number is output


Judging from the output results, the overall performance of str_replace is better than strtr and preg_replace. The reason can be seen from looking at the source code of str_replace (http://code.google.com/p/cyy0523xc/source/browse/trunk/php/str_replace%E6%BA%90%E7%A0%81.c), When str_replace(array search, string|array replace, string subject) is executed, it will loop through each element of the search in order (not according to the subscript or other order, this is related to the underlying implementation of the array), Then go to the subject to match, and if found, replace it with the corresponding replace. This will indeed be more efficient than strtr, because there will be one more loop from the maximum length of the subscript to the minimum length. If the length of the subscript string changes significantly at this time, and the subject string is relatively long, the overhead here will be It is also relatively large. However, there is something we need to pay attention to in the implementation of str_replace, that is, it will not give priority to the largest match like strtr. For example:


Copy code
The code is as follows: str_replace(array('ab', 'abc'), '1' , 'abcd');

If strtr is used, our output result will be "1d", because strtr will achieve the maximum match. However, str_replace will output "1cd", because 'ab' is ranked before "abc" in the search string, so 'ab' will be replaced with '1' first.

Now let’s summarize the usage of these three functions:
str_replace:
This should be the preferred method for string replacement, but there is one thing to note, that is Put the elements you most want to match first. (For efficiency improvement, sometimes it is worthwhile to do this)

strtr: strtr is also very efficient when replacing short strings, but the difference in the subscript length of the search array is also It has a relatively large impact on efficiency, and it is best not to use the form strtr(string, string, string) (it is easy to produce garbled characters for non-single-byte characters).

preg_replace: Needless to say, you can use regular matching, which is definitely the most powerful function, but you have to sacrifice some efficiency.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/327903.htmlTechArticleI have analyzed the source code of strtr before, now let’s compare the efficiency of strtr, str_replace and preg_replace: Copy the code as follows : $str = '11111111000000000000000000000000000000011100...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template