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

Php 交换字符串中的两个单词,php,str-replace,Php,Str Replace,假设有一个字符串“foo boo foo boo”,我想用boo替换所有foo,用foo替换booes。预期输出为“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"; //

假设有一个字符串“foo boo foo boo”,我想用boo替换所有foo,用foo替换booes。预期输出为“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"

可能使用一个临时值,如
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";
使用

从手册中:

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

在这种情况下,只要没有空键,键和值可以具有任何长度;此外,返回值的长度可能与str的长度不同。但是,当所有键的大小相同时,此函数的效率最高

输出

foo boo foo boo
boo foo boo foo


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

第一个
foo
zoo
。然后是
boo
foo
,最后是
zoo
boo

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


如果在本例中,这是您的案例顺序,那么使用
分解
阵列_反转
功能也很方便:

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

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

//gives boo foo boo foo
PS:可能对内存不友好,也可能无法满足所有与替换相关的情况,但它只是满足您给出的示例。:)


因此,所有项目都将是“foo”@Orangepill,我以前从未使用过
strtr
。我喜欢它!这是一种通用方法,因为它不需要知道特定的单词(例如,
foo
boo
),只有定界符(此处:`space char')是固定的。意味着您只需将输入更改为
$a=“bar baz”并且它也可以工作。
$search = array('foo', 'boo', 'zoo');
$replace = array('zoo', 'foo', 'boo');
echo str_replace($search, $replace, $string);
$a = "foo boo foo boo";
echo "$a\n";
$b = str_replace(array("foo", "boo","[anything]"), array("[anything]", "foo","boo"), $a);
echo "$b\n";
//the original string
$a = "foo boo foo boo";

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

//gives boo foo boo foo