strtr()和str_replace()的区别

工作中遇到了字符串替换的问题,查了一下php中常用的替换函数有strtr()和str_replace().分享一下我自己使用这两个函数的一些心得.

####strtr(subject,from,to) / strtr(subject,array)

echo strtr('i LOVE php','love','1234');//输出 i LOVE php;

首先它是大小写敏感的.

echo strtr('i love python','love','12');//输出 i 12ve pyth2n;

这个结果很怪异,from和to中的字符串参数并不是作为整体计算的,而是逐个替换的,以上的结果: ’l’->1,‘o’->2, ’ve’找不到对应的字符,不参与替换,被舍弃. 因此以上语句的作用是:

在i love python这个字符串中,将所有的 l 替换成 1 , o 替换成 2

而在这句:

echo strtr('i love python','lo','1234');//输出 i 12ve pyth2n;

同理,’l’->1,‘o’->2, ‘34’被舍弃,结果同上

echo strtr('i love python','love','');//输出 i love python;

第二个参数为空,love没有对应的字符,不进行替换,原样输出

echo strtr('i LOVE php',array('love'=>'1234','php'=>'python'));//输出i LOVE python
echo strtr('i love php',array('love'=>'12','php'=>'python'));//输出i 12 python

而当替换的两个参数作为数组传入时,相反却是整体替换的,且大小写敏感.这个很明确.

####str_replace (from,to ,subject)

print_r(str_replace('love','1234','i LOVE python'));//输出 i LOVE python

依然大小写敏感

echo str_replace('love','12','i love python');//输出 i 12 python

与strtr()不同,’love’和'12’是作为整体替换的,与strtr()数组参数的时候相似

print_r(str_replace('love','12',array('i','love the','python')));
//输出Array ( [0] => i [1] => 12 the [2] => python )

如上所示,str_replace()的特殊之处在于,目标可以传入数组,替换规格相同

总的来说,strtr()是个功能很诡异的函数,虽然路边社的消息strtr函数的效率是str_replace函数的四倍,但是易用和方便性上来说,最好还是用str_replace.

Comments

comments powered by Disqus