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

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

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.