web-dev-qa-db-fra.com

str_replace avec tableau

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?

37
LautaroAngelico

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...');
36
Ry-

É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); 
46
Rakesh Tembhurne

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

16
desiweb.ir

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

2
TwystO