PHP str_替换两个单词

PHP str_替换两个单词,php,str-replace,Php,Str Replace,我的代码在下面 echo $type = str_replace(array('q','h','f'),array('Quarter','Half','Full'),$_POST['type']); 在上面的第$_POST['type']行中有这3个值 $\u帖子类型='q' $\邮政类型='h' $\邮政类型='f' 我想换一个 q与四分之一 h加一半 f带满 我的问题是$\u POST['type']='h' 上述代码的结果表示$type的值为HalFull 为什么会发生这种事 有什么

我的代码在下面

echo $type = str_replace(array('q','h','f'),array('Quarter','Half','Full'),$_POST['type']);
在上面的第$_POST['type']行中有这3个值

  • $\u帖子类型='q'
  • $\邮政类型='h'
  • $\邮政类型='f'
  • 我想换一个

    • q与四分之一
    • h加一半
    • f带满
    我的问题是$\u POST['type']='h'

    上述代码的结果表示$type的值为HalFull

    为什么会发生这种事

    有什么解决办法吗

    谢谢你解决了这个问题
    str_replace
    针对三个参数中的每一个连续执行

    对于第一个参数,不替换任何内容

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

    对于第二个参数,将
    Half
    f
    替换为
    Full

    因此,您最终得到的是
    HalFull


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

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

    echo $type = preg_replace(array('/^q/i','/^h/i','/^f/i'),array('Quarter','Half','Full'),'h');
    
    问题
    str_replace
    针对三个参数中的每一个连续执行

    对于第一个参数,不替换任何内容

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

    对于第二个参数,将
    Half
    f
    替换为
    Full

    因此,您最终得到的是
    HalFull


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

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

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

    似乎它正在用
    Half
    替换
    h
    ,然后用
    Full
    替换
    Half
    的最后一个
    f

    可能是,如果您可以提供一个regexp,该regexp只替换源字符串正好是一个字符的情况,那么它就可以工作

    试试这个:

    echo$type=preg\u replace(数组('/^q$/i','/^h$/i','/^f$/i'),数组('Quarter','Half','Full'),$POST['type']);
    

    它可以工作

    它似乎在用
    Half
    替换
    h
    ,然后用
    Full
    替换
    Half
    的最后一个
    f

    可能是,如果您可以提供一个regexp,该regexp只替换源字符串正好是一个字符的情况,那么它就可以工作

    试试这个:

    echo$type=preg\u replace(数组('/^q$/i','/^h$/i','/^f$/i'),数组('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','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']];
    

    不,不,先生。。。当$\u POST['type']='h'时,我只想要一半,我得到了一半。我只是想Half@GyandeepSharma当前位置我在回答中添加了一个解决方案或仅使用基本if-elseno no no no先生。。。当$\u POST['type']='h'时,我只想要一半,我得到了一半。我只是想Half@GyandeepSharma:我在回答中添加了一个解决方案,或者只使用基本的if-else为什么不稍微改变一下顺序?如果您按照“q”、“f”、“h”的顺序进行替换,那么我认为您会很好,因为“Full”中没有“h”…为什么不稍微更改一下顺序呢?如果您按照“q”、“f”、“h”的顺序进行替换,那么我认为您会很好,因为“Full”中没有“h”。。。