str_replace с массивом

У меня возникают проблемы с функцией PHP str_replace при использовании массивов.

У меня есть это сообщение:

 $message = strtolower("L rzzo rwldd ty esp mtdsza'd szdepw ty esp opgtw'd dple"); 

И я пытаюсь использовать str_replace следующим образом:

 $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); 

Результат должен быть A good glass in the bishop's hostel in the devil's seat , но вместо этого я получаю p voos vlpss xn twt qxswop's wosttl xn twt stvxl's stpt .

Однако, когда я только пытаюсь заменить 2 буквы, они хорошо их заменяют:

 $new_message = str_replace(array('l','p'), array('a','e'), $message); 

буквы l и p будут заменены на a и e .

Почему он не работает с полным алфавитным массивом, если они оба одинакового размера?

Solutions Collecting From Web of "str_replace с массивом"

str_replace с массивами просто выполняет все замены последовательно. strtr этого используйте strtr чтобы сделать их все сразу:

 $new_message = strtr($message, 'lmnopq...', 'abcdef...'); 

Поскольку str_replace () заменяет слева направо, он может заменить ранее вставленное значение при выполнении нескольких замен.

     // Выводит F, потому что A заменяется на B, затем B заменяется на C и так далее ...
     // Наконец, E заменяется на F, из-за замены слева направо.
     $ search = array ('A', 'B', 'C', 'D', 'E');
     $ replace = array ('B', 'C', 'D', 'E', 'F');
     $ subject = 'A';
     echo str_replace ($ search, $ replace, $ subject);

Легко и лучше str_replace :

 <?php $arr = array( "http://" => "http://www.", "w" => "W", "d" => "D"); $word = "http://desiweb.ir"; echo strtr($word,$arr); ?> 

strtr PHP doc здесь

В качестве альтернативы ответ, помеченный как правильный, если вам нужно заменить слова вместо символов, вы можете сделать это с помощью этого фрагмента кода:

 $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; 

Демо: http://sandbox.onlinephpfunctions.com/code/56de88aef7eece3d199d57a863974b84a7224fd7