Première différence :
Un exemple intéressant de différence de comportement entre strtr
y str_replace
se trouve dans la section des commentaires du manuel PHP :
<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $word);
?>
- Je m'attendais à ce résultat : "ZDDB"
- Cependant, ce retour : "ZDDD" (Parce que B = D selon notre tableau)
Pour que cela fonctionne, utilisez "strtr" à la place :
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
Cela signifie que str_replace
est une approche plus globale des remplacements, tandis que strtr
traduit simplement les caractères un par un.
Autre différence :
Étant donné le code suivant (tiré de Comparaison de la vitesse de remplacement des chaînes de caractères en PHP ) :
<?php
$text = "PHP: Hypertext Preprocessor";
$text_strtr = strtr($text
, array("PHP" => "PHP: Hypertext Preprocessor"
, "PHP: Hypertext Preprocessor" => "PHP"));
$text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor")
, array("PHP: Hypertext Preprocessor", "PHP")
, $text);
var_dump($text_strtr);
var_dump($text_str_replace);
?>
Les lignes de texte qui en résultent sont les suivantes :
string(3) "PHP"
string(27) "PHP : préprocesseur hypertexte"
L'explication principale :
Cela se produit parce que :
-
strtr Il classe ses paramètres par longueur, dans l'ordre décroissant, de sorte que :
- il accordera "plus d'importance" à la clé la plus grande, puis, comme le texte du sujet est lui-même la clé la plus grande du tableau de remplacement, il sera traduit.
- parce que tous les caractères du texte du sujet ont été remplacés, le processus s'arrête là.
-
str_replace Le système fonctionne dans l'ordre dans lequel les clés sont définies :
-
il trouve la clé "PHP" dans le texte du sujet et la remplace par : "PHP : Hypertext Preprocessor", ce qui donne comme résultat :
"PHP : Préprocesseur hypertexte : Hypertext Preprocessor".
-
puis il trouve la clé suivante : "PHP : Hypertext Preprocessor" dans le texte résultant de l'étape précédente, qui est donc remplacé par "PHP", ce qui donne le résultat suivant :
"PHP : Préprocesseur hypertexte".
-
il n'y a plus de clés à chercher, le remplacement s'arrête donc là.