将许多If语句转换为一个语句。腓

时间:2012-04-26 07:50:23

标签: php if-statement

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语句。我觉得有一种方法让我无法理解它。

由于

5 个答案:

答案 0 :(得分:2)

如何使用数学?

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

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

答案 1 :(得分: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];
    }
}

答案 2 :(得分:0)

if ($raw >= 500 && $raw<= 1000){
        $score = ceil(($raw-500)/50);
}

答案 3 :(得分:0)

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

您可以按照以下方式执行此操作:

floor(($raw-450)/50)

答案 4 :(得分: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; }