使用关联数组打印与用户输入匹配的值


Using an Associative Array to Print Values Matching User Input

我有一个小程序,我正在尝试为类完成,它要求我接受用户输入,在数组中找到匹配项,然后打印值(如果 values 键与用户输入匹配)。

我已经尝试了一些不同的事情,但我得到的最常见的逻辑错误是输入其中一个键返回当前迭代"DoReMiFaSoLaTi"(如下所示)。

我遇到的另一个问题是,当我将 else 块(回显"不在这里"错误)添加到嵌套在 foreach 中的 if 语句时,它会返回 DoNotHereReNotHere 等。

这是课堂作业,所以我也在课堂上尝试过常规陈述。这些没有按预期工作。

我正在用头撞墙,试图找出逻辑错误的地方,所以任何帮助都非常感谢。谢谢!

   <?php
$scale = array(
    "A" => "Do",
    "B" => "Re",
    "C" => 'Mi',
    "D" => 'Fa',
    "E" => 'So',
    "F" => 'La',
    "G" => 'Ti'
);
$query = isset($_POST['notes']);
if ($query != null)
{
    foreach ($scale as $key => $sound)
    {
        if ($query == $key)  
        {
            echo $sound;
        }
    }
}

?>
<form action="MusicalScale.php" method="post">
<label>Enter in a music note</label>&nbsp;&nbsp;<input type="text" name="notes"><br>
<input type="submit" value="Submit">
</form>
 <?php
$scale = array(
"A" => "Do",
"B" => "Re",
"C" => 'Mi',
"D" => 'Fa',
"E" => 'So',
"F" => 'La',
"G" => 'Ti'
);

if (isset($_POST['notes']))
 {
   $query=$_POST['notes'];
   foreach ($scale as $key => $sound)
   {
    if ($query == $key)  
    {
        echo $sound;
    }
    }
    }

 ?>
<form action="MusicalScale.php" method="post">
<label>Enter in a music note</label>&nbsp;&nbsp;<input type="text"    name="notes"><br>
<input type="submit" value="Submit">
</form>

使用isset检查变量是否已设置。它不是用来声明变量的。这样的东西会起作用:

if (isset($_POST['notes']))
{
    $query = $_POST['notes'];
    foreach ($scale as $key => $sound)
    {
        if ($query == $key)  
        {
            echo $sound;
            break;
        }
        else 
        {
            echo "There is no match!";
            break;
        }
    }
}

您也可以在没有循环的情况下这样做。

$scale = array(
    "A" => "Do",
    "B" => "Re",
    "C" => 'Mi',
    "D" => 'Fa',
    "E" => 'So',
    "F" => 'La',
    "G" => 'Ti'
);
if(!empty($_POST['notes'])){
    if(!empty($scale[$_POST['notes']])){
        echo $scale[$_POST['notes']];
    }else{
        echo "Not here!";
    }
}