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 回答