今天遇到个问题,做同义词的替换的时候,发现如果是a=>b, b=>a
这种替换形式,如果用之前的方法str_replace,哈哈哈那是要出错的,因为他会顺序替换,先是a换成b,然后b又不换成了a,强大的PHP早就为这种做好了准备啦。可以用strtr这个函数有两种形式。
string strtr ( string str, string from, string to )
string strtr ( string str, array replace_pairs )
如果是字符串替换的时候,
echo strtr('O my god', 'god', 'abcd');
echo strtr('O my god', 'god', 'ab');
得到结果是:
O my abc
O my abd
如果当from<to 替换以后还是最长只能from的长度
如果当from>to 替换以后长度按to的长度,多余部分为to+剩下未替换的字符串
这个函数有个好处就是当做array替换的时候
$r = array('abc'=>'123', '123'=>'abc');
$title = 'abcdefg123';
echo strtr($title, $r);
echo str_replace(array_keys($r), array_values($r), $title);
结果:
123defgabc
abcdefgabc
这个例子中,本意是替换abc=>123 123=>abc
但是如果用str_replace,那么获得abcdefgabc
第一次abc被替换了,但是又被替换回来了,因为str_replace是根据array值对应替换的
而strtr替换了第一个以后字符串会往后执行替换,不会重头再来~
abcabcdefgabc