我正在用 PHP 编写一个基本的摩尔斯电码转换器,它可以接受一个字符串并将其转换为摩尔斯电码。它使用关联数组、foreach 循环和 for 循环。它有效,除了出于某种原因,它在每个转换后的字符后输出等效于“0”的摩尔斯电码。我无法弄清楚 0 是从哪里来的。如果我从关联数组中删除 0,没有问题,但我也希望能够转换数字。如果有人能够给我一些反馈,我将不胜感激。
代码如下:
<?php
$string = "dog";
$string_lower = strtolower($string);
$assoc_array = array(
"a"=>".-",
"b"=>"-...",
"c"=>"-.-.",
"d"=>"-..",
"e"=>".",
"f"=>"..-.",
"g"=>"--.",
"h"=>"....",
"i"=>"..",
"j"=>".---",
"k"=>"-.-",
"l"=>".-..",
"m"=>"--",
"n"=>"-.",
"o"=>"---",
"p"=>".--.",
"q"=>"--.-",
"r"=>".-.",
"s"=>"...",
"t"=>"-",
"u"=>"..-",
"v"=>"...-",
"w"=>".--",
"x"=>"-..-",
"y"=>"-.--",
"z"=>"--..",
"0"=>"-----",
"1"=>".----",
"2"=>"..---",
"3"=>"...--",
"4"=>"....-",
"5"=>".....",
"6"=>"-....",
"7"=>"--...",
"8"=>"---..",
"9"=>"----.",
"."=>".-.-.-",
","=>"--..--",
"?"=>"..--..",
"/"=>"-..-.",
" "=>" ");
for($i=0;$i<strlen($string_lower);$i++){
foreach($assoc_array as $letter => $code){
if($letter == $string_lower[$i]){
echo "$code<br/>";
}
}
}
?>
最佳答案
主要问题是您做的“多于”必要的事情。当您可以使用字符串从中获取所需数据时,无需像那样循环遍历您的 $assoc_array
。
这也使用了更少的资源,因为不是从 a-z
和 0-9
循环,您只循环所需的确切数量的字母/数字/空格。
/*Rest of your code above*/
for($i=0;$i<strlen($string_lower);$i++){
echo (isset($assoc_array[$string_lower[$i]])) ? $assoc_array[$string_lower[$i]] . '<br />' : 'ERROR';
}
由于您的数组包含从 a-z
和 0-9
的所有内容,您可以轻松地调用所需的字母,而不必担心丢失数据。
编辑:
添加了一个 isset()
检查,它几乎不需要因为 $assoc_array
涵盖了每个需要的字母/数字,但安全总比抱歉好。 (感谢@Farkie 提醒我)
关于PHP摩尔斯电码转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150018/