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)
主要问题是您正在做“不必要的”事情。$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';
}
Run Code Online (Sandbox Code Playgroud)
由于数组包含所有内容,a-z因此0-9您可以轻松地调用所需的字母,而不必担心丢失数据。
编辑:
添加了一张isset()支票,几乎不需要用它作为$assoc_array封面所需的每个字母/数字,但比后悔更安全。(感谢@Farkie提醒我)