0
function rawtransform{

            if ($raw>=500 && $raw<=550){
                    $score= 1;
            }
            if ($raw>=550 && $raw<=600){
                    $score= 2;
            }
            if ($raw>=600 && $raw<=650){
                    $score= 3;
            }
            if ($raw>=700 && $raw<=750){
                    $score= 4;
            }
            if ($raw>=750 && $raw<=800){
                    $score= 5;
            }
            if ($raw>=800 && $raw<=850){
                    $score= 6;
            }
            if ($raw>=850 && $raw<=900){
                    $score= 7;
            }
            if ($raw>=900 && $raw<=950){
                    $score= 8;
            }
            if ($raw>=950 && $raw<=1000){
                    $score= 9;
            }
    }

这似乎很基本,编码也不是很好。(我只是在学习 php )任何人都可以提供更好的方法吗?也许是一个 if 语句。我认为有一种方法不能让我的头脑围绕它。

谢谢

4

5 回答 5

2

只用数学怎么样?

function rawtransform($raw) {
  $score = (int)($raw/50)-9;
}

不过,您可能希望为输入添加范围检查。

于 2012-04-26T07:58:08.817 回答
1

您可以创建条件列表,然后循环并应用 if。

$conditions = array(
    array(500, 550, 1), // greater than value, lesser than value, assignment value
    array(550, 600, 2),
    array(650, 700, 3)  // add the rest of the conditions
);

foreach($conditions as $condition) {
    if($raw >= $condition[0] && $raw <= $condition[1]) {
        $score = $condition[2];
    }
}
于 2012-04-26T07:56:20.397 回答
0
if ($raw >= 500 && $raw<= 1000){
        $score = ceil(($raw-500)/50);
}
于 2012-04-26T07:54:22.537 回答
0

您的逻辑似乎是您从 raw 中减去 450,然后将其除以 50 并四舍五入到最接近的整数。(但是,您的实现中存在问题,好像 raw 是 50 的因子,它将满足两个 if 语句的要求,并且当它落在 650 和 700 之间时缺少一个条件。)

你可以这样做:

floor(($raw-450)/50)
于 2012-04-26T07:56:48.873 回答
0

您可以使用 if...else 构造。

        if ($raw>=500 && $raw<=550){
                $score= 1;
        }
        elseif ($raw>=550 && $raw<=600){
                $score= 2;
        }
        elseif ($raw>=600 && $raw<=650){
                $score= 3;
        }

这样,如果脚本遇到大小为 575 的情况,它甚至不会费心经历以下条件。

在您给定的示例中,可以通过以下方式简化脚本:

function rawtransform($raw) { $score = floor(($raw - 450)/50); return $score; }
于 2012-04-26T07:56:53.827 回答