Php 使用str_替换和数组切换文本
关于str_replace(),我发现了一些有趣的东西。 在我的函数中,我需要进行两个mysql查询,这两个查询在排序结果上略有变化。作为一个参数,我得到了一个包含order子句的字符串,例如“姓氏ASC”,但也可以是“姓氏DESC”。现在,我想使用str_replace轻松切换到反向排序,我认为这应该可以做到:Php 使用str_替换和数组切换文本,php,string,Php,String,关于str_replace(),我发现了一些有趣的东西。 在我的函数中,我需要进行两个mysql查询,这两个查询在排序结果上略有变化。作为一个参数,我得到了一个包含order子句的字符串,例如“姓氏ASC”,但也可以是“姓氏DESC”。现在,我想使用str_replace轻松切换到反向排序,我认为这应该可以做到: str_replace(array('ASC', 'DESC'), array('DESC', 'ASC'), $subject) 在我看来,它应该改变所有发生的ASC与DESC和所
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会认为这是平等的?有没有其他方法可以使这种替换更容易呢?事实上,我只是猜测:替换是连续的。这意味着,它首先将
ASC
替换为DESC
,然后将DESC
替换为ASC
,这将再次生成相同的字符串
更新:看来,我是对的
php > $a = 'I am a string';
php > var_dump(str_replace(array('am', 'is'), array('is', 'k'), $a));
string(12) "I k a string"
首先,它将am
替换为is
(第一个条目),然后将is
替换为k
PHP首先“呈现”第一个参数,以您想要的方式更改所有出现的情况(所有ASC
设置为DESC
)
但随后您传递了第二个参数,表示执行相反的操作,因此所有
DESC
s都设置为ASC
,基本上将第一个参数置零。在这种情况下,您可以这样使用:
这将起作用,因为
如果给定两个参数,则第二个参数应为以下形式的数组
数组('from'=>'到',…)
。返回值是一个字符串,其中所有
数组键的引用已替换为相应的
价值观最长的钥匙将首先试用。一旦子字符串
已替换,将不会再次搜索其新值
使用stru_replace
发生的事情,正如您已经发现的,首先ASC
被DESC
替换,然后DESC
被替换回ASC
,因为总共没有做任何事情
strtr($subject, array('ASC' => 'DESC', 'DESC' => 'ASC'));