如果它们是真正的PHP,如何处理所有情况

时间:2014-09-05 09:15:07

标签: php switch-statement case

我想知道是否有办法完成所有三种情况,如果它们都是真的,但是使用break,因为例如,如果第一种情况为真,则第二种情况为假,第三种情况为也是假的,而且我没有使用休息,无论如何它都将通过。所以改变2014年10月6日的strtotime,你会看到我的意思

$date = strtotime("1 October 2014"); 
switch($date) {  
     case (date('l', $date) == 'Monday'): //case 1: If the current day is Monday
      echo "weekly<br>";
     break;

     case (date('d', $date) == '01'):  //case 2: If the current day of the month is 1
      echo "monthly<br>";                       
     break;

    case ( ((date('n') % 3) == '1') && (date('d') == '01') ): //case 3: If a quart of the year has just passed,and we are in the first day of a new quart
      echo 'quarterly<br>';     
    break;   

}

有什么建议吗?如果切换不可能,如果执行代码行3次,每种情况下都应该如何使用。

4 个答案:

答案 0 :(得分:3)

这不是switch的工作方式 - 它旨在根据定义的条件执行单行执行 - 因此是一个“切换”。将其替换为单独的if语句。

答案 1 :(得分:1)

$date = strtotime("1 October 2014"); 

     if (date('l', $date) == 'Monday'){ //case 1: If the current day is Monday
      echo "weekly<br>";
     }
     if (date('d', $date) == '01'){  //case 2: If the current day of the month is 1
      echo "monthly<br>";                       
     }
    if ( ((date('n', $date) % 3) == '1') && (date('d', $date) == '01') ){ //case 3: If a quart of the year has just passed,and we are in the first day of a new quart
      echo 'quarterly<br>';   
    }  

答案 2 :(得分:1)

UPDATE:解决方案,不使用函数:

$date = strtotime("1 September 2014");
$continue = true;

if(date('l', $date) == 'Monday'): //case 1: If the current day is Monday
    echo "weekly<br>";
else:
    $continue = false;
endif;

if(date('d', $date) == '01' && $continue):  //case 2: If the current day of the month is 1
    echo "monthly<br>";
else:
    $continue = false;
endif;

if( ((date('n') % 3) == '1') && (date('d') == '01') && $continue ): //case 3: If a quart of the year has just passed,and we are in the first day of a new quart
    echo 'quarterly<br>'; 
endif;


OLD VERSION (使用函数): 我只为你编写了一个非常适合你的小功能:

function sequencer($date_string)
{
    $date = strtotime($date_string);

    if(date('l', $date) == 'Monday'): //case 1: If the current day is Monday
        echo "weekly<br>";
    else:
        return;
    endif;

    if(date('d', $date) == '01'):  //case 2: If the current day of the month is 1
        echo "monthly<br>";
    else:
        return;
    endif;

    if( ((date('n') % 3) == '1') && (date('d') == '01') ): //case 3: If a quart of the year has just passed,and we are in the first day of a new quart
        echo 'quarterly<br>'; 
    else:
        return;
    endif;
}

sequencer("1 October 2014");

如上所示,只需使用日期字符串调用它,strotime()也在函数内部完成。

答案 3 :(得分:0)

对第一个答案感到抱歉 - 我从未试图做你正在做的事情,我显然无法正确阅读问题。

话虽如此,您实际上可以执行带有条件的echo语句来设置要显示的内容:

<?php

    $date = strtotime("6 October 2014");

    echo (date('l', $date) == 'Monday')?"Weekly<br>":"";
    echo (date('d', $date) == '01') == 'Monday')?"Monthly<br>":"";
    echo ( ((date('n') % 3) == '1') && (date('d') == '01') ) == 'Monday')?"Quarterly<br>":"";

?>

以上将输出您想要的行为,例如。