加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何将“a”替换为“d”,将“b”替换为“e”,将“c”替换

发布时间:2020-12-13 21:50:33 所属栏目:PHP教程 来源:网络整理
导读:我想在字符串上执行此搜索和替换,比如说密码. 正如你可以从这个问题中理解的那样,更换后的字符串应该成为sdvvzrug. 但不幸的是,以下代码输出bbbbcaab: $search = range("a","z");$replace = array_merge(range("d","z"),range("a","c"));echo str_replace($
我想在字符串上执行此搜索和替换,比如说密码.

正如你可以从这个问题中理解的那样,更换后的字符串应该成为sdvvzrug.

但不幸的是,以下代码输出bbbbcaab:

$search = range("a","z");
$replace = array_merge(range("d","z"),range("a","c"));
echo str_replace($search,$replace,"password");

可能是什么原因引起了这个问题?起初我怀疑在str_replace中使用数组,因此我使用了一个循环并尝试一次替换一个字符:

$search = range("a","c"));
$str = "password";
    for($i = 0; $i < 26; $i++)
    {
    $str = str_replace($search[$i],$replace[$i],$str);
    }
echo $str;

令我极为沮丧的是,结果保持不变.我做错了什么,我应该如何取得正确的结果?

解决方法

其他答案已经解释了如何做到这一点,所以我将重点关注“我做错了什么?”部分.

所以,你的for循环等价于:

$str = str_replace('a','d',$str);
$str = str_replace('b','e',$str);
$str = str_replace('c','f',$str);
$str = str_replace('d','g',$str);
$str = str_replace('e','h',$str);
$str = str_replace('f','i',$str);
$str = str_replace('g','j',$str);
// ...
$str = str_replace('z','c',$str);

正如你所看到的,这种“扫过”字母表:a被d替换,后来d被替换为g,后来g被j替换.问题在于,当你用g替换d时,无论d代表最初的d还是原来的a,你都会这样做.每个str_replace都丢弃信息;在第一行之后,你无法判断字符串ddd是最初添加的,还是原来的爸爸,当你将d改为g时,你会得到ggg而不是dgg或gdg或诸如此类的东西.

只有一个str_replace的版本具有相同结果的原因是str_replace与你的循环做同样的事情:它只是迭代搜索数组,执行替换,并不确保它永远不会“重新替换”子串.这就是为什么你需要使用专门为此目的而设计的strtr等方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读