Php str_仅替换精确匹配

Php str_仅替换精确匹配,php,string,str-replace,Php,String,Str Replace,你好 我试图创建一个莫尔斯电码到文本和文本到莫尔斯电码转换器 我的代码: $letter = str_split(strtolower($_POST['text'])); $morse = $_POST['morse']; $morsecmp = explode(" ",$morse); $letter = implode(" ",$letter); $mode = $_POST['sub']; $morsecode = array(".-","-...","-.-.","-..","..-.

你好

我试图创建一个莫尔斯电码到文本和文本到莫尔斯电码转换器

我的代码:

$letter = str_split(strtolower($_POST['text']));
$morse = $_POST['morse'];
$morsecmp = explode(" ",$morse);
$letter = implode(" ",$letter);
$mode = $_POST['sub'];

$morsecode = array(".-","-...","-.-.","-..","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",
            ".--.","--.-",".-.","...","-.","..-","...-",".--","-..-","-.--","--..",".");
$letters = array("a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r",
            "s","t","u","v","w","x","y","z","e");

if($mode == "Text to Morse Code"){  
    $letter = str_replace($letters,$morsecode,$letter);
    $translated = $letter;
}else{
    for($x=0;$x<sizeof($letters);$x++){
        for($y=0;$y<sizeof($morsecmp);$y++){

            if($morsecode[$x] === $morsecmp[$y]){
                echo $morsecode[$x]." === ".$letters[$x]."<br>";
                $morse = str_replace($morsecode[$x],$letters[$x],$morse);
            }
        }
    }
    $translated = $morse;
}
$letter=str_split(strtolower($_POST['text']);
$morse=$_POST['morse'];
$morsecmp=爆炸(“,$morse);
$letter=内爆(“,$letter”);
$mode=$_POST['sub'];
$morsecode=数组(“.-”、“-…”、“-.-”、“-…”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”,
".--.","--.-",".-.","...","-.","..-","...-",".--","-..-","-.--","--..",".");
$letters=数组(“a”、“b”、“c”、“d”、“f”、“g”、“h”、“i”、“j”、“k”、“l”、“m”、“n”、“o”、“p”、“q”、“r”,
“s”、“t”、“u”、“v”、“w”、“x”、“y”、“z”、“e”);
如果($mode==“文本到摩尔斯电码”){
$letter=str_replace($letters,$morsecode,$letter);
$translated=$letter;
}否则{

对于($x=0;$x首先,您的数组中没有存储完整的字母表。我注意到您缺少了“e”

使用
爆炸(''$morse\u code)
将摩尔斯电码吹到一个数组中,然后对数组进行替换(使用“/”分隔单词)

使用
内爆()
将其压缩回字符串

这里有一个数组供您使用,它包含了整个字母表(您可以使用
array\u flip
切换键和值以进行来回转换)


就在重新拼合字符时,为
搜索
字符串添加了额外的空间

 $morse = $_POST['morse']." ";  // this is to add an extra space at the end of the morse string.
现在,我们用所需的字母替换所有出现的摩尔斯电码字符串,后跟空格

 $morse = str_replace($morsecode[$x]." ",$letters[$x],$morse);

替换精确匹配的唯一方法是:

   $morse = preg_replace("#{$morsecode[$x]}#", $letters[$x], $morse, 1); //Limit to 1
   $morse = preg_replace("#{$morsecode[$x]}#", $letters[$x], $morse, 1); //Limit to 1