使用数组PHP交换两个字符串

时间:2015-03-25 19:41:19

标签: php arrays string replace

我正在尝试将“E”替换为“E”,将“E”替换为字符串中的“e”,似乎无法正常工作。我正在使用数组:

$original = "e and E";
$swap = array(
    "E" => "e",
    "e"  => "E");

$edited= str_replace(array_keys($swap), array_values($swap), $original);

echo $original. "<br>";
echo $edited;

返回“E和E”。我想回复“E和e”,你能帮助我吗?

3 个答案:

答案 0 :(得分:1)

虽然是gotcha,但这是预期的行为。您将所有E替换为e,然后将所有e替换为E。结果是E and E

您需要两次通过,使用占位符或使用strtr()。正如 mario 所评论的,交换字符串的相应功能是strtr()

$edited = strtr($original, $swap);

答案 1 :(得分:0)

str_replace可以使用数组,但它不能按预期工作。您可以使用它来替换例如所有出现的&#34; e&#34;与&#34; E&#34;以及所有&#34; a&#34;用&#34; A&#34;但它是顺序而不是同时完成的。所以在你的代码中,&#34; e和E&#34;首先被替换为&#34; e和e&#34;然后到&#34; E和E&#34;。

请改为:

$original = "e and E";
$edited = str_replace("e", "#", $original);
$edited = str_replace("E", "e", $edited);
$edited = str_replace("#", "E", $edited);
echo $original. "<br>";
echo $edited;

答案 2 :(得分:0)

您需要使用临时令牌进行两次传递:

$original = "e and E";
$swap = array(
    "E" => "$",
    "e"  => "E",
    "$" => 'e',    
);

$edited= str_replace(array_keys($swap), array_values($swap), $original);
echo $edited;