在使用数组时,我在使用 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'hostel in the devil'sit
,但我得到的却是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() 是从左到右替换的,因此在进行多次替换时,它可能会替换先前插入的值。
<pre>; // 输出 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); </pre>;
使用数组时,str_replace
只是按顺序执行所有替换。使用 strtr
可以一次性完成所有替换:
$new_message = strtr($message, 'lmnopq...', 'abcdef...');
比 str_replace
更简单、更好用:
<?php
$arr = array(
"http://" => "http://www.",
"w" => "W",
"d" => "D");
$word = "http://desiweb.ir";
echo strtr($word,$arr);
?>
strtr
PHP doc here