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