J'ai des problèmes avec le PHP fonction str_replace
lorsque vous utilisez des tableaux.
J'ai ce message:
$message = strtolower("L rzzo rwldd ty esp mtdsza'd szdepw ty esp opgtw'd dple");
Et j'essaie d'utiliser str_replace
comme ça:
$new_message = str_replace(
array('l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k'),
array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'),
$message);
Le résultat devrait être A good glass in the bishop's hostel in the devil's seat
, mais au lieu de cela, je reçois p voos vlpss xn twt qxswop's wosttl xn twt stvxl's stpt
.
Cependant, lorsque je tente seulement de remplacer 2 lettres, cela les remplace bien:
$new_message = str_replace(array('l','p'), array('a','e'), $message);
les lettres l
et p
seront remplacées par a
et e
.
Pourquoi ne fonctionne-t-il pas avec le tableau d'alphabet complet si leur taille est identique?
str_replace
avec des tableaux effectue simplement tous les remplacements de manière séquentielle. Utilisez strtr
à la place pour tout faire en même temps:
$new_message = strtr($message, 'lmnopq...', 'abcdef...');
Étant donné que str_replace () remplace de gauche à droite, il est possible que vous remplaciez une valeur précédemment insérée lors de plusieurs remplacements.
// Les sorties F parce que A est remplacé par B, puis B est remplacé par C, et ainsi de suite ... // Finalement, E est remplacé par F, en raison des remplacements de gauche à droite. $ search = array ('A', 'B', 'C', 'D', 'E'); $ replace = array ('B', 'C', ' D ',' E ',' F '); $ Subject =' A '; Echo str_replace ($ search, $ replace, $ subject);
Facile et meilleur que str_replace
:
<?php
$arr = array(
"http://" => "http://www.",
"w" => "W",
"d" => "D");
$Word = "http://desiweb.ir";
echo strtr($Word,$arr);
?>
strtr
PHP doc ici
Alternativement à la réponse marquée comme correcte, si vous devez remplacer des mots au lieu de caractères, vous pouvez le faire avec ce morceau de code:
$query = "INSERT INTO my_table VALUES (?, ?, ?, ?);";
$values = Array("Apple", "oranges", "mangos", "papayas");
foreach (array_fill(0, count($values), '?') as $key => $wildcard) {
$query = substr_replace($query, '"'.$values[$key].'"', strpos($query, $wildcard), strlen($wildcard));
}
echo $query;
Démo ici: http://sandbox.onlinephpfunctions.com/code/56de88aef7eece3d199d57a863974b84a7224fd7