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等方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |