PHP str_replace 替换两个词

PHP str_replace Replacing Two words

我的代码如下..

echo $type = str_replace(array('q','h','f'),array('Quarter','Half','Full'),$_POST['type']);

这里在上面的行 $_POST['type'] 有这 3 个值;

  1. $_POST 类型 = 'q'
  2. $_POST 类型 = 'h'
  3. $_POST 类型 = 'f'

我要更换

我的问题是 $_POST['type']='h',

以上代码的结果表示$type的值是HalFull.

为什么会这样...

有什么解决办法吗...?

谢谢

问题

str_replace对三个参数中的每一个连续执行

对于第一个参数,没有任何替换。

对于第二个参数,h替换为Half

第二个参数,将Halff替换为Full

所以你最终得到 HalFull


解决方案

有很多方法可以解决这个问题。

最简单的解决方案是改用 preg_replace,并优化您的搜索条件:

echo $type = preg_replace(array('/^q/i','/^h/i','/^f/i'),array('Quarter','Half','Full'),'h');

似乎是用 Half 替换 h,然后用 Full

替换 Half 的最后一个 f

如果您可以提供一个仅在源字符串正好是一个字符时才替换的正则表达式,那么它可能会起作用。

试试这个:

echo $type = preg_replace(array('/^q$/i','/^h$/i','/^f$/i'),array('Quarter','Half','Full'),$_POST['type']);

有效

如果你改变替换的顺序,你会没事的:

echo $type = str_replace(array('q','f','h'),array('Quarter','Full','Half'),$_POST['type']);

..因为 'f' 产生 'Full',而 'Full' 没有任何 'h',所以下一个替换是安全的。

或者您也许可以选择一种完全不同的方法,这样会更安全,而且我敢说更具可读性和可维护性。

$translate = array(
  'q' => 'Quarter',
  'h' => 'Half',
  'f' => 'Full'
);

echo $type = $translate[$_POST['type']];