假设我有类似下面的文字
John是John,Sara是Sara
我想把它变成:
萨拉是萨拉,约翰是约翰
如果我执行str_replace("John","Sara",$input)
,那么将不再有 John 并且str_replace("Sara","John",$input)
会将所有名称都转换为 John ,那么我该怎么办?做这个?有内置的功能可以实现这一点吗?
答案 0 :(得分:5)
您可以使用数组来不运行多个替换,但是str_replace
将不会产生正确的结果。给定 John is John and Sara is Sara
:
$result = str_replace(['John', 'Sara'], ['Sara', 'John'], $string);
收益: John is John and John is John
您需要使用strtr
,因为它搜索和替换的方式可以消除此问题:
$result = strtr($string, ['John'=>'Sara', 'Sara'=>'John']);
收益: Sara is Sara and John is John
摘自手册strstr:
最长的键将首先尝试。 替换子字符串后,将不再搜索其新值。
答案 1 :(得分:0)
本质上并没有内置的方法,但是您可以将这些块分割成一个数组,反转它们,然后重新加入:
$new = implode(' and ', array_reverse(explode(' and ', $input)));
这假定您的输入匹配格式<whatever> and <whatever>
。