Première différence:
Un exemple intéressant d'un comportement différent entre strtr
et se str_replace
trouve dans la section 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);
?>
- J'attendrais comme résultat: "ZDDB"
- Cependant, ce retour: "ZDDD" (Parce que B = D selon notre tableau)
Pour que cela fonctionne, utilisez plutôt "strtr":
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
Cela signifie qu'il str_replace
s'agit d'une approche plus globale des remplacements, tout strtr
en traduisant simplement les caractères un par un.
Une autre différence:
Étant donné le code suivant (tiré de PHP String Replacement Speed Comparison ):
<?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 résultantes seront:
string (3) "PHP"
string (27) "PHP: Hypertext Preprocessor"
La principale explication:
Cela se produit parce que:
strtr : il trie ses paramètres par longueur, par ordre décroissant, donc:
- cela donnera "plus d'importance" au plus grand, puis, comme le texte sujet est lui-même la plus grande clé du tableau de remplacement, il sera traduit.
- parce que tous les caractères du texte sujet ont été remplacés, le processus s'arrête là.
str_replace : il fonctionne dans l'ordre dans lequel les clés sont définies, donc:
- 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: préprocesseur hypertexte».
puis il trouve la clé suivante: «PHP: Hypertext Preprocessor» dans le texte résultant de l'étape précédente, donc elle est remplacée par «PHP», ce qui donne comme résultat:
«PHP: préprocesseur hypertexte».
il n'y a plus de clés à rechercher, donc le remplacement s'arrête là.
strtr
pourrait facilement être mal interprété carstrstr
ce qui est tout à fait différent. Je commence à penser que je suis dyslexique. Je ne ferai pas cette erreur avec str_replace.