我正在尝试将“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”,你能帮助我吗?
答案 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;