str_replace 容易被忽视的一点

str_replace 的前两个参数都可以是数组,当他们是数组时,会依次替换。比如 str_replace(array(‘a’, ‘1’), array(‘b’, ‘2’), ‘aaa111’); 的结果就是 bbb222。

但是这里 str_replace 的行为实际上并不是把 ‘a’ 映射为 ‘b’,把 ‘1’ 映射为 ‘2’,而是先做一轮替换,把 ‘a’ 替换为 ‘b’ ,再做一轮替换把 ‘1’ 替换为 ‘2’。在某些情况下,不了解这个情况,用str_replace 来做映射的时候就可能出错。

比如,想把 ‘a’ 映射为 ‘b’,把 ‘b’ 映射为 ‘c’,用str_replace(array(‘a’, ‘b’), array(‘b’, ‘c’), ‘abc’); 的结果不是 ‘bcc’ 而是 ‘ccc’。

要实现映射,得用另一个函数—— strtr。

4 thoughts on “str_replace 容易被忽视的一点

  1. fc_lamp May 7, 2010 / 5:35 pm

    真是那样。。。它是一直替换。。直到字符串中找不到‘a’与’b’为止。。。

  2. haoguoliang September 17, 2008 / 10:40 pm

    这样呀,还真没测试过。

  3. 茉玄 September 15, 2008 / 3:38 am

    中秋快乐

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s