加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 21:44:37 所属栏目:PHP教程 来源:网络整理
导读:这是我刚刚发现的有关str_replace()的有趣内容. 在我的函数中,我需要进行两个 mysql查询,这些查询与排序结果的细微变化相同.作为一个参数,我得到包含一个order子句的字符串,例如’surname ASC’,但它也可以是’surname DESC’.现在我想使用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'),这很奇怪,因为

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,总共没有做任何事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读