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


swap two words in a string php

假设有一个字符串"foo-boo-foo-boo",我想用boo替换所有的fooe,用foo替换booe。期望的输出为"boo-foo-boo-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"

使用strtr

来自手册:

如果给定两个参数,第二个参数应该是数组形式的数组('from'=>'to',…)。返回值是一个字符串,其中所有出现的数组键都已被相应的值替换。将首先试用最长的密钥。一旦替换了子字符串,就不会再搜索它的新值。

在这种情况下,只要没有空键,键和值可以具有任何长度;此外,返回值的长度可能与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

实际

也许使用像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";

第一个foozoo。然后是boofoo,最后是zooboo

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

如果像本例中那样,这是您的情况顺序,那么使用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:可能对内存不友好,也可能不满足替换的所有情况,但它只是满足您给出的示例。:)

$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";

注意,"x"不能出现在$a 中

试试

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