我想知道是否有办法完成所有三种情况,如果它们都是真的,但是使用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次,每种情况下都应该如何使用。
答案 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>":"";
?>
以上将输出您想要的行为,例如。