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

あなたの論理は、rawから450を引き、それを50で割り、最も近い整数に切り捨てているようです。(ただし、実装には問題があります。rawが50倍であるかのように、2つの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 に答える
0
if ($raw >= 500 && $raw<= 1000){
        $score = ceil(($raw-500)/50);
}
于 2012-04-26T07:54:22.537 に答える