将str1替换为str2,反之亦然

时间:2019-02-13 18:45:37

标签: php

假设我有类似下面的文字

  

John是John,Sara是Sara

我想把它变成:

  

萨拉是萨拉,约翰是约翰

如果我执行str_replace("John","Sara",$input),那么将不再有 John 并且str_replace("Sara","John",$input)会将所有名称都转换为 John ,那么我该怎么办?做这个?有内置的功能可以实现这一点吗?

2 个答案:

答案 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>