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 个值;
- $_POST 类型 = 'q'
- $_POST 类型 = 'h'
- $_POST 类型 = 'f'
我要更换
- q 与季度
- 半小时
- f 完整。
我的问题是 $_POST['type']='h',
以上代码的结果表示$type的值是HalFull.
为什么会这样...
有什么解决办法吗...?
谢谢
问题
str_replace
对三个参数中的每一个连续执行
对于第一个参数,没有任何替换。
对于第二个参数,h
替换为Half
。
第二个参数,将Half
的f
替换为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']];
我的代码如下..
echo $type = str_replace(array('q','h','f'),array('Quarter','Half','Full'),$_POST['type']);
这里在上面的行 $_POST['type'] 有这 3 个值;
- $_POST 类型 = 'q'
- $_POST 类型 = 'h'
- $_POST 类型 = 'f'
我要更换
- q 与季度
- 半小时
- f 完整。
我的问题是 $_POST['type']='h',
以上代码的结果表示$type的值是HalFull.
为什么会这样...
有什么解决办法吗...?
谢谢
问题
str_replace
对三个参数中的每一个连续执行
对于第一个参数,没有任何替换。
对于第二个参数,h
替换为Half
。
第二个参数,将Half
的f
替换为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']];