php切换第一个案例不能正常工作

时间:2015-04-28 04:48:24

标签: php function switch-statement conditional-statements

我有这个功能,当$time = 0

时执行第一个案例
    function time_spended($time){
        switch($time){
            case $time > (60*60*24*365):
                $time /= (60*60*24*365);
                return number_format($time, 2, '.', ',') . " year" . ($time > 1 ? "s":"");
                break;
            case $time > 60*60*24:
                $time /= 60*60*24;
                return number_format($time, 2, '.', ',') . " day" . ($time > 1 ? "s":"");
                break;
            case $time > 60*60:
                $time /= 60*60;
                return number_format($time, 2, '.', ',') . " hour" . ($time > 1 ? "s":"");
                break;
            case $time > 60:
                $time /= 60;
                return number_format($time, 2, '.', ',') . " minute" . ($time > 1 ? "s":"");
                break;
            default:
                return number_format($time, 2, '.', ',') . " seconds";
        }
    }

例如:

echo time_spended(0); // 0.00 year

而不是:

  

0.00秒

3 个答案:

答案 0 :(得分:3)

函数返回0.00 year(换句话说,来自第一个case 的结果),因为$time = 0中的switch计算为{{1当false$time > (60*60*24*365)时,它返回第一个分支的结果, viz

true

要使其有效,您应该使用[0 == true] => [false == true] => [false] 代替switch(true),它应该按照下面显示的方式工作:

switch($time)

Example

答案 1 :(得分:0)

conversation.processUpTo(10);中的条件应放在括号内。

switch

答案 2 :(得分:0)

您没有正确使用switch声明。 switch语句用于在多个值中进行选择。更合适/更明确的方法是使用elif来实现逻辑:

function time_spended($time){        
        if($time > (60*60*24*365)) {
            //...
        } elseif ($time > 60*60*24) {
            // ...
        } elseif($time > 60*60) {
            // ...
        } elseif($time > 60) {
            //...
        } else {
            return number_format($time, 2, '.', ',') . " seconds";
        }          
}

switch的正确示例是:

switch($currentDayOfTheWeek){
    case 'Monday': // ...
    case 'Tuesday': // ...
    case 'Wednesday: // ...
    // and so on
    default: // cause it's goo practice to have a default  branch
}

修改:感谢Mike发表elif评论:)