在字符串php中交换两个单词

时间:2013-07-25 06:28:57

标签: php str-replace

假设有一个字符串“foo boo foo boo”我想用fo替换所有foo和boo的boo。预期的输出是“boo foo boo foo”。我得到的是“foo foo foo foo”。如何获得预期的输出而不是当前的输出?

    $a = "foo boo foo boo";
    echo "$a\n";
    $b = str_replace(array("foo", "boo"), array("boo", "foo"), $a);
    echo "$b\n";
    //expected: "boo foo boo foo"
   //outputs "foo foo foo foo"

6 个答案:

答案 0 :(得分:25)

使用strtr

从手册:

  

如果给出两个参数,则第二个应该是表单数组中的数组('from'=>'到',...)。返回值是一个字符串,其中所有出现的数组键都已被相应的值替换。将首先尝试最长的密钥。替换子字符串后,将不再搜索其新值。

     

在这种情况下,如果没有空键,则键和值可以具有任何长度;另外,返回值的长度可能与str的长度不同。但是,当所有键具有相同的大小时,此功能将是最有效的。

$a = "foo boo foo boo";
echo "$a\n";
$b = strtr($a, array("foo"=>"boo", "boo"=>"foo"));
echo "$b\n"; 

输出

foo boo foo boo
boo foo boo foo

In Action

答案 1 :(得分:3)

也许使用像coo.

这样的临时值

示例代码,

$a = "foo boo foo boo";
echo "$a\n";
$b = str_replace("foo","coo",$a);
$b = str_replace("boo","foo",$b);
$b = str_replace("coo","boo",$b);
echo "$b\n";

答案 2 :(得分:2)

首先foozoo。然后boofoo,最后zooboo

$search = array('foo', 'boo', 'zoo');
$replace = array('zoo', 'foo', 'boo');
echo str_replace($search, $replace, $string);

答案 3 :(得分:1)

如果在此示例中是您的案例的顺序,那么使用explodearray_reverse函数也可以很方便:

//the original string
$a = "foo boo foo boo";

//explodes+reverse+implode
$reversed_a = implode(' ', array_reverse(explode(' ', $a)));

//gives boo foo boo foo
  

PS:可能不是内存友好,但可能无法满足围绕替换的所有情况,但它只是满足您提供的示例。 :)

答案 4 :(得分:0)

$a = "foo boo foo boo";
echo "$a\n";
$a = str_replace("foo", "x", $a);
$a = str_replace("boo", "foo", $a);
$a = str_replace("x", "boo", $a);
echo "$a\n";

请注意,“$”不能出现在$ a

答案 5 :(得分:0)

试试吧

$a = "foo boo foo boo";
echo "$a\n";
$b = str_replace(array("foo", "boo","[anything]"), array("[anything]", "foo","boo"), $a);
echo "$b\n";