У меня возникают проблемы с функцией 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
.
Почему он не работает с полным алфавитным массивом, если они оба одинакового размера?
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