Я пытаюсь заменить символы (цифры и буквы) в строке. Когда я пытаюсь использовать метод «php», это дает неправильный результат для некоторых символов. Зачем?Почему php str_replace с несколькими массивами дает неправильный результат, но для цикла дает правильный результат?
PHP-WAY:
$find = array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
$replace = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p");
$haystack = "a5c9a06bfacf5f12cf01ab3f202f6c78"
//This incorrectly returns: kpmjkkglpkmppplmmpklklnpmkmpgmhi
echo str_replace($find, $replace, $haystack);
LOOP ПУТЬ:
$find = array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
$replace = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p");
$haystack = "a5c9a06bfacf5f12cf01ab3f202f6c78"
//This correctly returns: kfmjkaglpkmpfpbcmpabkldpcacpgmhi
$newStr = "";
$chars = str_split($haystack);
for ($i = 0, $length = count($chars); $i < $length; $i++)
{
$newStr .= $replace[ array_search($chars[ $i ], $find) ];
}
echo $newStr;
Почему первый один неправильный? Я использую это неправильно?
Порядок записей в ваших массивах .... str_replace() будет обрабатывать каждую запись массива в том порядке, в котором они отображаются в вашем массиве, поэтому, если «1» заменяется на «b», тогда это «b» будет впоследствии замените на «l»; используйте strtr() (http://uk3.php.net/manual/en/function.strtr.php), а не str_replace(), если вы хотите предотвратить это поведение. –
Спасибо, добавлено как ответ ниже! –