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

发布于 2022-09-11 19:56:24 字数 1353 浏览 14 评论 0

 * 获取用户购买商品折扣比例
 * 折扣比例说明:
 * 积分 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压缩成一行,要不太长了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

歌入人心 2022-09-18 19:56:24
$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;
}
天煞孤星 2022-09-18 19:56:24
 <?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;

    
絕版丫頭 2022-09-18 19:56:24
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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文