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

Swap two strings using array PHP

我正在尝试将字符串中的 "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;

它returns "E and E"。我想return"E and e",你能帮帮我吗?

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

您需要分两次执行此操作,使用占位符或使用 strtr()。正如 mario 评论的那样,swap 字符串的适当函数是 strtr():

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

str_replace 可以接受一个数组,但它并没有像你期望的那样工作。例如,您可以使用它来替换所有出现的 "e" 和 "E" 以及所有 "a" 和 "A" 但它是按顺序 而不是同时。因此,在您的代码中,"e and E" 首先替换为 "e and e",然后替换为 "E and E"。

改为这样做:

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

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

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

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