微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 使用str_replace和数组切换文本

这是我刚刚发现的有关str_replace()的有趣内容.
在我的函数中,我需要进行两个mysql查询,这些查询与排序结果的细微变化相同.作为一个参数,我得到包含一个order子句的字符串,例如’surname ASC’,但它也可以是’surname DESC’.现在我想使用str_replace轻松切换到反向排序,我认为这应该可以解决问题:

str_replace(array('ASC', 'DESC'), array('DESC', 'ASC'), $subject)

在我看来,它应该改变所有出现的ASC与DESC以及所有出现的DESC与ASC.由于字符串只包含两个中的一个我应该得到反转顺序子句.
然而,这种情况并非如此.上面代码输出是相同的字符串.

我做了一些测试,并且它告诉我们这些调用会按照您的要求执行:

str_replace('ASC', 'DESC', $subject)
str_replace(array('ASC'), array('DESC'), $subject)

在我看来,这很奇怪,因为

array('ASC', 'DESC') != array('DESC', 'ASC')

为什么PHP会认为这是平等的?有没有其他方法可以轻松进行这种更换?

解决方法:

在这种情况下,您可以像这样使用strtr

strtr($subject, array('ASC' => 'DESC', 'DESC' => 'ASC'));

这将有效,因为

If given two arguments, the second should be an array in the form
array('from' => 'to', ...). The return value is a string where all the
occurrences of the array keys have been replaced by the corresponding
values. The longest keys will be tried first. Once a substring has
been replaced, its new value will not be searched again.

See it in action.

使用str_replace会发生什么,正如您已经发现的那样,第一个ASC被DESC替换,然后DESC被替换回ASC,总共没有做任何事情.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐