Codeigniter PHP测试评分逻辑&;改善? $arr=$results->row(); $score=0; 外汇($arr as和$i){ 交换机(一美元){ 案例(i=1): $score+=1; 打破 案例($i4): $score+=3; 打破 案例($i>=8): $score+=0.5; 打破 } } echo$score

Codeigniter PHP测试评分逻辑&;改善? $arr=$results->row(); $score=0; 外汇($arr as和$i){ 交换机(一美元){ 案例(i=1): $score+=1; 打破 案例($i4): $score+=3; 打破 案例($i>=8): $score+=0.5; 打破 } } echo$score,codeigniter,logic,Codeigniter,Logic,这是我当前的代码,它根据大约30 db(SQL)条目加总值。有点像是一个分级规则。 我需要帮助改进上述代码。有更好的方法吗 还有。其中一些(即,第3、5、8行需要进行不同的评分。)我如何在此逻辑中省略这些行并传递它们以进行不同的评分 这是一个codeigniter函数,所以如果有人能给我展示一个快速、简单、漂亮的方法,我会很高兴的!非常感谢 可以做一些小的改进,但不能太大 简单地使用if/else而不是开关盒可以稍微提高速度 确定哪种情况最常发生,并将其放在第一位,因为这将减少每次迭代需要命中

这是我当前的代码,它根据大约30 db(SQL)条目加总值。有点像是一个分级规则。 我需要帮助改进上述代码。有更好的方法吗

还有。其中一些(即,第3、5、8行需要进行不同的评分。)我如何在此逻辑中省略这些行并传递它们以进行不同的评分


这是一个codeigniter函数,所以如果有人能给我展示一个快速、简单、漂亮的方法,我会很高兴的!非常感谢

可以做一些小的改进,但不能太大

  • 简单地使用if/else而不是开关盒可以稍微提高速度
  • 确定哪种情况最常发生,并将其放在第一位,因为这将减少每次迭代需要命中的情况数量
  • 为一个简单的
    isset
    调用创建一个您希望跳过的迭代数组,而不是检查每种情况(需要多个if/else语句)
  • 跟踪跳过这些行的迭代次数

$skip_iterations=array(3=>1,5=>1,8=>1);
$arr=$results->row();
$score=0;
$i=1;
foreach($arr as&$a){
//跳过第3、5和8行
if(isset($skip_iterations[$i++]))
继续;
如果($a>=1&&$a 4&&$a<8){
$score+=3;
}否则如果($a>8){
$score+=0.5;
}
}
echo$score;

这看起来不错。如果我想创建4个案例(不同的评分方法),我将如何切换这些案例?您只需添加另一个
else If
子句,顺序由您决定。根据用户通常选择的答案,简单地将它们按频率递减的顺序排列。我认为我们没有交流。。。我是说,如果我想要多种评分方法,我会怎么做?也就是说,我想单程得2分,4分,5分,6分,20分,另一程得3分,7分,9分,跳过1分,10分?
$arr = $results->row();
$score = 0;
foreach ($arr as &$i) {
    switch($i){
        case ($i <= 4 AND $i >= 1):
            $score += 1;
            break;
        case ($i < 8 AND $i > 4):
            $score += 3;
            break;
        case ($i >= 8):
            $score += .5;
            break;
    }
}
    echo $score
$skip_iterations = array(3 => 1, 5 => 1, 8 => 1);
$arr = $results->row();
$score = 0;
$i = 1;
foreach ($arr as &$a) {
    // skip rows 3, 5, and 8
    if (isset($skip_iterations[$i++])) 
        continue;
    if ($a >= 1 && $a <= 4) {
        $score += 1;
    } else if ($a > 4 && $a < 8) {
        $score += 3;
    } else if ($a > 8) {
        $score += .5;
    }
}
echo $score;