PHP测试评分逻辑&改进?

时间:2010-01-09 23:36:01

标签: codeigniter logic

$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

这是我当前的代码,它基于大约30 db(SQL)条目累加总值。有点像评分ruberik。 我需要帮助改进上面的代码。有更好的方法吗?

另外。其中一些(即行3,5,8需要以不同的方式得分。)如何在此逻辑中省略这些行并将它们传递给不同的得分?

这是一个codeigniter功能,所以如果有人能给我一个快速简单,漂亮的方法,我会喜欢它!非常感谢!

1 个答案:

答案 0 :(得分:1)

可以进行微小的改进,但没有什么大的改进。

  • 只需使用 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) {
    // 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;