1

私は単純な数値範囲を取り (このプロジェクトの例では、ユーザーごとに異なる金額の増分で作業しています。ちなみに、偽のお金です...)、それらをクラスにグループ化して、代わりに公に表示できるようにしています。絶対数。

以下は、例としてこの関数を記述する長い道のりのコードの大まかなサンプルです。

<?
$money=500001;

if($money > 0 AND $money < 5000) {
    $class = 'Poor';
} elseif ($money >= 5000 AND $money < 25000) {
    $class = 'Lower Class';
} elseif ($money >= 25000 AND $money < 100000) {
    $class = 'Middle Class';
} elseif ($money >= 100000) {
    $class = 'Upper Class';
}
echo $class;
exit();
?>

さて、この関数が機能することはわかっていますが、$class' をさらに追加すると、非常に長くなりすぎるため、この関数を記述する方法はまったくひどいものに思えます。

今私の質問は:これを書くためのより短い方法はありますか? おそらく range() および/または値の配列を使用していますか?

4

2 に答える 2

2

私は次のようなものに行きます:

function getClass($sal){
    $classes = array(5000=>"poor", 25000=>"Lower Class", 100000=>"Middle Class");
    foreach ($classes as $key => $value) {
        if($sal < $key){
            return $value;
        }
    }
    return "Upper Class";
}


$salary = 90000;
$sal_class = getClass($salary);    
echo "salary class = $sal_class\n";

出力:
sal = 中産階級

于 2012-08-27T05:44:35.090 に答える
1

上記の回答に少し似ていますが、より良い回答です。OO アプローチを使用することをお勧めします。

Class Foo {
    protected $class = array(
        array("poor", 0, 5000),
        array("medium", 5000, 25000)
    );

    function get_class($amount) {
       foreach ($this -> class as $key => $value) {
           if($amount > $value[1] && $amount < $value[2]) {
              return $value[0];
           }
       }
       return null;
    }

    function add_class(array $arr) {
        $this -> class[] = $arr;
    }
}

使用法:

$obj = new Foo();
$obj -> get_class(6000); //Outputs: medium
$obj -> add_class(array("rich", 25000, 50000)); //Add a new class
$obj -> get_class(35000); //Outputs: rich
于 2012-08-27T05:56:20.180 に答える