PHP Morse代码转换器

8se*_*7en 5 php arrays loops converter morse-code

我正在用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/>";
            }
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

Epo*_*dax 5

主要问题是您正在做“不必要的”事情。$assoc_array当您可以使用字符串从字符串中获取所需的数据时,无需遍历。

这也使用较少的资源,而不是循环循环a-z0-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';       
} 
Run Code Online (Sandbox Code Playgroud)

由于数组包含所有内容,a-z因此0-9您可以轻松地调用所需的字母,而不必担心丢失数据。

编辑: 添加了一张isset()支票,几乎不需要用它作为$assoc_array封面所需的每个字母/数字,但比后悔更安全。(感谢@Farkie提醒我)