2014-05-21 128 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

相关问题