尝试在PHP中基于多个if-elseif条件设置变量

时间:2016-12-07 19:43:08

标签: php

我正在使用PHP中的事件日历。日历本身运行良好,但我正在尝试根据事件开始/结束时间对日历中的各个条目进行颜色编码。我有if / elseif逻辑仅使用开始时间,但我尝试使用开始结束时间导致奇怪。

这是功能:

function get_bg_color ($event_start) {

    // set colors for shifts
    // 0 = grave
    // 1 = days
    // 2 = swing
    // 3 = weekend
    // 4 = day-swing
    // 5 = grave-day
    // 6 = swing-grave

    // $hr = date('H', $event_start);
    $hr = date('H:i', $event_start);
    $hour1 = str_replace(':', '', $hr);
    $hr2 = date('H:i', $event_end);
    $hour2 = str_replace(':', '', $hr2);
    $day = date('L', $event_start);
    if ($day == "sunday" || $day == "saturday") {$color="3";}
#       elseif ($hour1 > 0 && $hour1 < 730) {$color="0";}
#       elseif ($hour1 >= 730 && $hour1 < 1300) {$color="1";}
#       elseif ($hour1 >= 1300 && $hour1 < 1530) {$color="4";}
#       elseif ($hour1 >= 1530 && $hour1 < 2100) {$color="2";}
#       else {$color="0";}
    else {
            if ($hour1 > 0 && $hour1 < 730) {
                    if ($hour2 < 730) {$color="0";}
                    elseif ($hour2 >= 730 && $hour2 < 1300) {$color="5";}
            }
            elseif ($hour1 >= 730 && $hour1 < 1300) {
                    if ($hour2 <= 1300) {$color="1";}
                    elseif ($hour2 >= 1300 && $hour2 < 1530) {$color="4";}
            }
            elseif ($hour1 >= 1300 && $hour1 < 1530) {
                    if ($hour2 <= 1530) {$color="4";}
                    elseif ($hour2 >= 1530 && $hour2 < 2100) {$color="4";}
            }
            elseif ($hour1 >= 1530 && $hour1 < 2100) {
                    if ($hour2 <= 2100) {$color="2";}
                    elseif ($hour2 > 2100) {$color="6";}
            }
            else {$color="0";}
    }
    return $color;
}

注释掉的elseif是逻辑的功能版本,仅使用开始时间。 elseifs的下部块(我修改后的开始/结束逻辑)不断给我错误的周末着色,用于不属于周末的事件。

颜色在单独的style.css中定义。从数据库中提取$event_start$event_end个变量。这些都可以在注释块中进行测试。

1 个答案:

答案 0 :(得分:0)

我想我已经抓住了所有 陌生感

function get_bg_color ($event_start, $event_end) {
//    --------- Missing Parameter ---^^^^^^^^^^ 
// needs this parameter on function call as well

    $hour1 = date('Hi', $event_start);
    // use the format required, save an instruction
    //$hour1 = str_replace(':', '', $hr);

    $hour2 = date('Hi', $event_end);

    // will NOT return a day name, will return 0,1,2,3,4,5,6
    //$day = date('L', $event_start);

    // will return a day name but need converting to lower case
    // so it matches your IF tests which are in lower case
    $day = strtolower(date('l', $event_start));

    // always a good idea to init returned values
    $color = "0";


    if ($day == "sunday" || $day == "saturday") 
    {
        $color="3";
    } else {
            if ($hour1 > 0 && $hour1 < 730) {
                if ($hour2 < 730) {$color="0";}
                elseif ($hour2 >= 730 && $hour2 < 1300) {$color="5";}
            }
            elseif ($hour1 >= 730 && $hour1 < 1300) {
                if ($hour2 <= 1300) {$color="1";}
                elseif ($hour2 >= 1300 && $hour2 < 1530) {$color="4";}
            }
            elseif ($hour1 >= 1300 && $hour1 < 1530) {
                if ($hour2 <= 1530) {$color="4";}
                elseif ($hour2 >= 1530 && $hour2 < 2100) {$color="4";}
            }
            elseif ($hour1 >= 1530 && $hour1 < 2100) {
                if ($hour2 <= 2100) {$color="2";}
                elseif ($hour2 > 2100) {$color="6";}
            }
            else {$color="0";}
    }
    return $color;
}
  

别忘了检查此函数的调用现在也有2个相关参数