2014-05-21 121 views
1

$sFactorGrades,我需要檢索基於GradeIDCommutatorID,分別是第一個和第二個元素的數組中的第0個元素。代碼沒有返回預期的結果

GradeIDCommutatorID作爲參數傳遞給函數。

我寫的代碼沒有返回我知道存在的值。

歡迎任何建議。

這裏是我的代碼:

function getMaximumSFactor($commuatorID, $gradeID) { 
    $sFactorGrades = populateSFactorGrades(); 
    $arraySize = count($sFactorGrades); 
    for ($i = 0; $i < $arraySize; $i++) { 
     if (intval($sFactorGrades[i][1]) == $commuatorID && intval($sFactorGrades[i][2]) == $gradeID) { 
      return $sFactorGrades[i][0]; 
     } else { 
      return 0; 
     } 
    } 
} 

這裏是我的數據:

Array (
    [0] => Array (
     [0] => Maximum S Factor 
     [1] => Commutator ID 
     [2] => Grade ID 
    ) 
    [1] => Array (
     [0] => 0.6 
     [1] => 1 
     [2] => 2 
    ) 
    [2] => Array (
     [0] => 0.6 
     [1] => 1 
     [2] => 3 
    ) 
    [3] => Array (
     [0] => 0.6 
     [1] => 1 
     [2] => 4 
    ) 
) 

這裏是我的結果: 0

回答

1

您的代碼存在的問題是您返回的時間太早。當您的代碼遇到return語句時,它會停止迭代。您需要將return語句移到循環外部以防止發生這種情況。

function getMaximumSFactor($commuatorID, $gradeID) { 
    $sFactorGrades = populateSFactorGrades(); 
    $arraySize = count($sFactorGrades); 
    for ($i = 0; $i < $arraySize; $i++) { 
     if (intval($sFactorGrades[$i][1]) == $commuatorID && 
      intval($sFactorGrades[$i][2]) == $gradeID) { 
      return $sFactorGrades[$i][0]; 
     } 
    } 
    return 0; 
} 

如果你的代碼到達最後return,那麼就意味着if條件是永遠不會滿足。對於getMaximumSFactor (1, 2),這應返回0.2

Demo

+0

總是有意義的。感謝您的回答和演示。 – Rijnhardt

2

我懷疑的理由你的循環總是返回0是你通過i作爲增量變量,而不是正確的:$i。錯別字可能具有破壞性......如果它仍然無效,請隨時更新您的帖子。

編輯:小費是同時處於發展階段,在你的頁面的頂部插入此:

ini_set('display_errors','On'); 
error_reporting(E_ALL); 

在這種情況下,它應該給一個undefined index錯誤或相似。

+0

雖然這不是真的問題。 –

+0

這是我看到爲什麼這樣一個IF語句永遠不會返回true的第一個也是最明顯的原因。 – Fredrik

1

$sFactorGrades[i]需要被$sFactorGrades[$i]。 也值得使用foreach()而不是正常的for()。 但那不是全部。您需要在返回結果之前檢查數組中的所有值:

function getMaximumSFactor($commuatorID, $gradeID) { 
    $sFactorGrades = populateSFactorGrades(); 
    foreach($sFactorGrades as $key=>$value){ 
    if (intval($value[1]) == $commuatorID && intval($value[2]) == $gradeID) { 
     return $value[0]; 
    } 
    } 
    return 0; 
} 
+0

對不起,希望我可以接受多個答案。 +1 – Rijnhardt

相關問題