亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP switch case,0 沒有被識別為一個值?

PHP switch case,0 沒有被識別為一個值?

PHP
慕虎7371278 2023-08-06 10:33:31
我在 PHP 腳本中有一個 switch case 語句,它根據 JS 文件中的 Ajax 調用提供的“日”和“小時”值返回一個字符串值。但是只要這些值為 0(即,星期日為日變量)和 0 作為小時變量的午夜)該語句不起作用并且該值返回空。我似乎找不到解決方案,這里是 PHP 函數和 Ajax 調用的代碼的較短版本;function getDayTimeData($day, $time){    $program = "";    switch($day){        case 0: //Sunday            switch($time){                case $time < 1:                    $program = 'Be Our Guest';                    break;                case $time < 6:                    $program = 'Club Technoise';                    break;                case $time < 12:                    $program = 'Morning Juice';                    break;                case $time < 21:                    $program = 'Detox';                    break;                case $time < 24:                    $program = 'Disco Ball';                    break;            }            break;     }}if(isset($_POST["DayData"]) && isset($_POST["TimeData"])){    echo(getDayTimeData($_POST["DayData"],$_POST["TimeData"]));}這是 Jquery Ajax 腳本function getDayTimeAjax(_day,_time){    var def2 = $.Deferred();        setTimeout(function(){        if(xhr && xhr.readyState != 4){            xhr.abort();        }        var xhr = $.ajax({            type: 'post',            url: 'returnPoster.php',            contentType: "application/x-www-form-urlencoded; charset=UTF-8",            data: {DayData: _day, TimeData: _time},            dataType: 'text',            success: function(x){                programInfo = x;                def2.resolve();            }        })    },2000);    return $.when(def2).done(function(){}).promise();}var d = new Date();var programInfo = ".";setInterval(function () { updateProgram() }, 3000);function updateProgram(){    getDayTimeAjax(d.getDay(),d.getHours()).done(function(){        console.log(programInfo.trim());    })}編輯:抱歉,大家看起來我在這個主題上提供了一些錯誤信息,因為當我設置這個線程時我有點著急。該問題僅在 $time 值為 0 時發生。這些值看起來很好,直到發生“case $time <1:”操作。從那時起,即使 $time 變量的值為 0,它也不會執行第一種情況下的代碼塊,因此程序變量保持為空。所有其他值都返回 switch 語句中的值。
查看完整描述

4 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

這是一個小例子。這將回顯基于時間的程序。為了確定日期,我建議使用 IF 而不是 switch case。


$time = date("H");

$day = date("w");

$program = "";


if($day == 0){

  switch($time){

    case $time < 1:

      $program = 'Be Our Guest';

      break;

    case $time < 6:

      $program = 'Club Technoise';

      break;

    case $time < 12:

      $program = 'Morning Juice';

      break;

    case $time < 21:

      $program = 'Detox';

      break;

    case $time < 24:

      $program = 'Disco Ball';

      break;

    }

  }else{

     .......

  }

echo $program;


查看完整回答
反對 回復 2023-08-06
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

你不能像這樣比較整數值和時間,

switch($time){

    case $time < 1:

      break;

}

嘗試比較相同類型的值。


查看完整回答
反對 回復 2023-08-06
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

你的問題出在 switch 語句上,如果你這樣做:


    switch($time){

        case $time < 1:

        ...

    }

并為 $time 填寫一個值,例如 0:


    switch(0){

        case 0 < 1:

        ...

    }

然后將調用中的值switch()與之后的值進行比較case:


0 == true

嗯,這個——以及所有其他比較——都是false。如果您確實想在 switch 語句中使用 less-than 進行比較,則需要執行以下操作:


    switch(true){

        case $time < 1:

        ...

    }

那么比較結果就是:


true == true

請注意,在您的原始代碼中,當 的 值$time不為 0 時,它會比較 is 3 == true,因為switch沒有嚴格檢查(它使用 ==,而不是 ===)true。無論值如何,它總是返回第一個結果“Be our guest”。


查看完整回答
反對 回復 2023-08-06
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

我認為你可以嘗試這個,它也可能適用于第一個開關,但我更喜歡使用if:


function getDayTimeData ($day, $time)

{

    if ((int) $day === 0) {

        switch($time){

            case $time < 1:

                $program = 'Be Our Guest';

            break;

            case $time < 6:

                $program = 'Club Technoise';

            break;

            case $time < 12:

                $program = 'Morning Juice';

            break;

            case $time < 21:

                $program = 'Detox';

            break;

            case $time < 24:

                $program = 'Disco Ball';

            break;

        }

    }

}


if(isset($_POST["DayData"]) && isset($_POST["TimeData"]))

{

    echo(getDayTimeData($_POST["DayData"],$_POST["TimeData"]));

}


查看完整回答
反對 回復 2023-08-06
  • 4 回答
  • 0 關注
  • 218 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號