例如:
有这么个字符串"AAAABBAA"
想将他替换为:“{AAAA}BB{AA}”.
那么编写如下代码:
$str = 'AAAABBAA';
$a = ['AAAA','AA'];
foreach ($a as $v) {
// 将AAAA或AA替换为带上{}的
$str = str_replace($v, "{".$v."}", $str);
}
print ($str);
上述代码将输出:
{{AA}{AA}}BB{AA}
这显然不是我们想要,因为{AAAA}被AA重复替换了
解决办法:
$s = 'AAAABBAA';
$arr = ['AAAA','AA'];
$md5arr = []; // 加上一个md5数组缓存
foreach ($arr as $v) {
$md5v = md5($v);
$md5arr[$md5v] = $v;
// 先替换为md5后的值,这样就不会被重复替换啦
$s = str_replace($v, "{".$md5v."}", $s);
}
// 再来一个遍历,将原来的md5值替换成原值即可!
foreach ($md5arr as $k=>$v){
$s = str_replace($k, $v, $s);
}
print ($s);
上述代码将输出:
{AAAA}BB{AA}
perfect!完美解决!