3

情報

私は現在、自分の Web サイトのユーザー レベル システムを作成しています。特定の賞やマイルストーンなどで増加するユーザー テーブルにポイント列があります。

問題

ユーザーのポイントを受け取り、返されるレベルに変換するこの switch ステートメントがあります。しかし、「0」は 0-100 オプションではなく、100-200 オプションにあると言っています。

function userLevel($points){

    switch ($points) {
        case ($points>=0 && $points<100):
            return 1; // Level 1
            break;
        case ($points>=100 && $points <200):
            return 2; // Level 2
            break;
        case ($points>=200 && $points<300):
            return 3; // Level 3
            break;
        case ($points>=300 && $points<400):
            return 4; // Level 4
            break;
    }

}

echo userLevel(0);

これは「一度にコーディングしすぎた」という質問の 1 つであり、答えはすぐ目の前にあるように感じますが、それを見ることができません!

4

3 に答える 3

5

ケースの使用条件から、おそらくオンにしたいでしょうTRUE

function userLevel($points){

    switch (true) {
        case ($points>=0 && $points<100):
            return 1; // Level 1
            break;
        case ($points>=100 && $points <200):
            return 2; // Level 2
            break;
        case ($points>=200 && $points<300):
            return 3; // Level 3
            break;
        case ($points>=300 && $points<400):
            return 4; // Level 4
            break;
    }

}
于 2013-11-11T14:18:32.653 に答える
3

その理由は、あなたのコードがこれになっているからです

function userLevel($points){

    switch (0) {
        case (true):  // compare 0 to true
            return 1; // Level 1
            break;
        case (false):  // compare 0 to false 
            return 2; // Level 2
            break;
        case (false):
            return 3; // Level 3
            break;
        case (false):
            return 4; // Level 4
            break;
    }

}

echo userLevel(0);

最初のケースは一致しません。0 != true

2 番目のケースは一致するため、0 == false

したがって、2 番目のオプションが実行されます

他の人が言ったように、スイッチでtrueを使用すると true == true、最初のケースになり、それが実行されます

于 2013-11-11T14:22:56.900 に答える
2

このための多くのコードを削除するためにできるもう 1 つの方法は、単純にこれを行うことです。

return floor(($points+100)/100);
于 2013-11-11T14:19:58.417 に答える