©
. Document créé le 8 juillet 2007 , mis à jour le 8 juillet 2007.En cas de morsure de vipère, sucez-vous le genou, ça fait marrer les écureuils. Pierre Desproges
Accueil du site > Astuces > PHP > Comparatif str_replace, preg_replace
Petit comparatif sur 4 fonctions PHP de manipulation de chaînes.
Méthodologie : supprime 150 fois les espaces d’une chaîne de caractères.
Les définitions :
<?php
define("BR", "<br /><br />");
define("PANGRAMME", "Portez ce vieux whisky au juge blond "
. "qui fume sur son île intérieure, à côté de l'alcôve "
. "ovoïde, où les bûches se consument dans l'âtre, ce "
. "qui lui permet de penser à la cœnogenèse de l'être "
. "dont il est question dans la cause ambiguë entendue "
. "à Moÿ, dans un capharnaüm qui, pense-t-il, diminue "
. "çà et là la qualité de son œuvre");
define("TEST_LOOP", 150);
?>
strtr ne permet pas de supprimer un caractère. Testé ici pour complément, en remplaçant les espaces par le caractère ’X’.
<?php
// test avec strtr
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
strtr(PANGRAMME, " ", "X");
}
$time = microtime() - $time;
echo ("strtr => " . $time . " micro-sec." . BR);
?>
strtr => 0.001529 micro-sec.
<?php
// test avec str_replace
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
str_replace(" ", "", PANGRAMME);
}
$time = microtime() - $time;
echo ("str_replace => " . $time . " micro-sec." . BR);
?>
str_replace => 0.001742 micro-sec.
<?php
// test avec ereg_replace
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
ereg_replace(" ", "", PANGRAMME);
}
$time = microtime() - $time;
echo ("ereg_replace => " . $time . " micro-sec." . BR);
?>
ereg_replace => 0.020078 micro-sec.
<?php
// test avec ereg_replace + classes
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
ereg_replace("[[:blank:]]", "", PANGRAMME);
}
$time = microtime() - $time;
echo ("ereg_replace using class => " . $time . " micro-sec." . BR);
?>
ereg_replace using class => 0.019416 micro-sec.
<?php
// test avec preg_replace
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
preg_replace("/ /", "", PANGRAMME);
}
$time = microtime() - $time;
echo ("preg_replace => " . $time . " micro-sec." . BR);
?>
preg_replace => 0.003088 micro-sec.
<?php
// test avec preg_replace + classes
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
preg_replace("/[[:blank:]]/", "", PANGRAMME);
}
$time = microtime() - $time;
echo ("preg_replace using class => " . $time . " micro-sec." . BR);
?>
preg_replace using class => 0.006692 micro-sec.
strtr ne permet pas de supprimer un caractère dans une chaîne. Le test sur un simple remplacement ici permet de constater que strtr est très efficace dans le cadre d’un remplacement.
str_replace est le plus rapide du lot, mais ne permet pas l’utilisation de classes regex. Cas d’un remplacement plus complexe ci-dessous.
preg_replace est environ dix fois plus rapide qu’ereg_replace, cinq fois en utilisant les classes.
Méthodologie : supprime 150 fois les voyelles d’un texte.
<?php
str_replace => 0.007978 micro-sec.
// test avec str_replace
// supprime les voyelles
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
$string = str_replace("a", "", PANGRAMME);
$string = str_replace("e", "", $string);
$string = str_replace("i", "", $string);
$string = str_replace("o", "", $string);
$string = str_replace("u", "", $string);
$string = str_replace("y", "", $string);
}
$time = microtime() - $time;
echo($string . BR);
echo("str_replace => " . $time . " micro-sec." . BR);
?>
<?php
preg_replace => 0.007742 micro-sec.
// test avec preg_replace
// supprime les voyelles
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
$string = preg_replace("/[aeiouy]/", "", PANGRAMME);
}
$time = microtime() - $time;
echo($string . BR);
echo("preg_replace => " . $time . " micro-sec." . BR);
?>
Les résultats sont très proches.
Méthodologie : supprime 150 fois 6 mots d’un texte.
<?php
str_replace => 0.005476 micro-sec.
// test avec str_replace
// supprime quelques mots
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
$string = str_replace("la", "", PANGRAMME);
$string = str_replace("ce", "", $string);
$string = str_replace("de", "", $string);
$string = str_replace("son", "", $string);
$string = str_replace("dont", "", $string);
$string = str_replace("qui", "", $string);
}
$time = microtime() - $time;
echo($string . BR);
echo("str_replace => " . $time . " micro-sec." . BR);
?>
<?php
str_replace avec tableau => 0.002216 micro-sec.
// test avec str_replace
// variante de la précédent en utilisant un tableau
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
$string = str_replace(array("la","ce","de","son","dont","qui"), "", $string);
}
$time = microtime() - $time;
echo($string . BR);
echo("str_replace avec tableau => " . $time . " micro-sec." . BR);
?>
<?php
preg_replace => 0.014214 micro-sec.
// test avec preg_replace
// supprime quelques mots
for($time = microtime(), $ii = 0; $ii < TEST_LOOP; $ii++) {
$string = preg_replace("/(la|ce|de|son|dont|qui)/", "", PANGRAMME);
}
$time = microtime() - $time;
echo($string . BR);
echo("preg_replace => " . $time . " micro-sec." . BR);
?>
str_replace l’emporte.
Les forums sont fermés.