2016-02-29 107 views
0

我有一個小程序我正在嘗試爲需要我接受用戶輸入的類完成,在數組中找到匹配項,然後在值關鍵字匹配時打印值用戶輸入。使用關聯數組打印數值匹配用戶輸入

我是相當新的PHP,所以裸跟我說:

我已經嘗試了一些不同的東西,但我得到的輸入鍵中的一個最常見的邏輯錯誤返回「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> 

回答

0

隨着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; 
     } 
    } 
} 
+0

我猜這個任務的重點是讓我們使用foreach嗎?不是很確定,但是當班級爲演習準備代碼時,老師提到了一個問題。我感謝你的幫助,這使事情變得更加清晰。如果我想要在用戶沒有輸入匹配鍵時執行返回錯誤,我會在哪裏放置它?在foreach中添加一個else塊到嵌套的if仍然會導致「notherenothere」(迭代通過數組的長度輸出nothere)。再次感謝任何額外的迴應! –

+0

我已更新我的回答。好的,使用foreach的原因是,如果有人輸入了一個不匹配的值。因此你必須在foreach中使用'if-else-statement'。 – Sun

+0

對,我明白這一點。問題是使用這個特定的代碼會導致回聲說:「沒有匹配!沒有匹配!沒有匹配!沒有匹配!沒有匹配!沒有匹配!沒有匹配!」這正是我想要避免的。 –

1
<?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> 
+0

現在應該工作...「isset()函數」 - 這個方法返回一個布爾值 –

+0

它並正確地響應輸入,但我在第17行得到一個未定義的變量錯誤(如果($查詢! = null)),我仍然不能設置一個else塊來顯示用戶錯誤。任何想法如何避免錯誤?謝謝您的幫助! –

+0

我編輯了代碼片段... plz再次測試它... –

0

你也可以這樣做,沒有循環。

$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!"; 
    } 

} 
相關問題