帮我看一下,这个php的switch我写的对不对?

 * 获取用户购买商品折扣比例
 * 折扣比例说明:
 * 积分 0     - 99      10折,没有折扣
 * 积分 100   - 999     9.5折
 * 积分 1000  - 2999    9折
 * 积分 3000  - 9999    8.5折
 * 积分 10000 - 99999   8折
 * 积分 100000  以上     7.5折
    
    //获取用户积分
    $integral = 1000; 
    //计算折扣比例
    $Rebate = 1;//默认没有折扣
    switch ($integral)
    {
        case $integral > 100000 :
            $Rebate = 0.75;
            break;
        case $integral > 10000 :
            $Rebate = 0.8;
            break;
        case $integral > 3000 :
            $Rebate = 0.85;
            break;
        case $integral > 1000 :
            $Rebate = 0.9;
            break;
        case $integral > 100 :
            $Rebate = 0.95;
            break;
        default:
            $Rebate = 1;
    }
    

我这么写的,有什么毛病吗,大神?还有更简单点的吗?谢谢哈!

更新:修改了一下,有点毛病。

        switch (true)
        {
            case $integral >= 100000 ; $Rebate = 0.75 ;break;
            case $integral >= 10000  ; $Rebate = 0.8  ;break;
            case $integral >= 3000   ; $Rebate = 0.85 ;break;
            case $integral >= 1000   ; $Rebate = 0.9  ;break;
            case $integral >= 100    ; $Rebate = 0.95 ;break;
            default:
                $Rebate = 1;
        }

switch (true),这里必须是true,否则是 0的情况,返回的不正确。然后case压缩成一行,要不太长了。

阅读 2.2k
3 个回答
$rebate = 1;
switch(true) {
    case $integral > 99999: $rebate -= 0.05;
    case $integral > 9999: $rebate -= 0.05;
    case $integral > 2999: $rebate -= 0.05;
    case $integral > 999: $rebate -= 0.05;
    case $integral > 99: $rebate -= 0.05;
}
 <?php
$integral = 990;
$Rebate = 1;//默认没有折扣
$len = strlen(ceil($integral / 10));
switch ($len) {
    case 5 :
        $Rebate = 0.75;
        break;
    case 4 :
        $Rebate = 0.8;
        break;
    case 3 :
        if ($integral > 3000) {
            $Rebate = 0.85;
        } else {
            $Rebate = 0.9;
        }
        break;
    case 2:
        $Rebate = 0.95;
        break;
    default:
        if ($integral > 100000) {
            $Rebate = 0.75;
        }
}
echo $Rebate . PHP_EOL;

    
function getRebate($integral) {
    // map为从大到小的折扣的对应数组,折扣有改动时,修改数组即可,这个数组的配置也可以放到其他地方,可以做到只改配置不改逻辑
    $map = [
        '100000' => 0.75,
        '10000'  => 0.8,
        '1000'   => 0.75
    ];
    foreach($map as $key => $val) {
        if ($integral > $key) {
            return $val;
        }
    }
    return 1;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题