【问题标题】:Swap two strings using array PHP [duplicate]使用数组PHP交换两个字符串[重复]
【发布时间】:2015-03-25 19:41:18
【问题描述】:

我正在尝试将字符串中的“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 and e”,你能帮帮我吗?

【问题讨论】:

  • 你将永远拥有所有E,因为这是最后一次替换。
  • strtr 在替换时只迭代输入一次;并且更便于替换字母的配对。

标签: php arrays string replace


【解决方案1】:

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

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

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

【讨论】:

  • 这比我的回答好。
【解决方案2】:

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;

【讨论】:

  • 正如您自己指出的那样,strtr() 是一个更好的解决方案。考虑一下如果$original 中有# 会发生什么?
【解决方案3】:

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

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

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

【讨论】:

  • strtr() 是一个更好的解决方案。考虑一下如果$original 中有$ 会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2014-05-11
  • 2011-06-18
相关资源
最近更新 更多