代替:
if($today >= $dateOne && $dateOne != '0000-00-00')
{
run some code
}
elseif($today >= $dateTwo && $dateTwo != '0000-00-00')
{
run some code
}
elseif($today >= $dateThree && $dateThree != '0000-00-00')
{
run some code
}
elseif($today >= $dateFour && $dateFour != '0000-00-00')
{
run some code
}
else
{
run this code
}
…上升到$dateEleven
,还有更好的原因吗?我想一定有比这些elseif
语句更好的方法
$dates = Array( 1 => $dateOne, 2 => $dateTwo, ... );
foreach($dates as $key => $date) {
if($today > $date && $date != '0000-00-00') {
$date_key = $key;
break ; // exit loop
}
}
switch($date_key) {
case 1:
// code 1
break;
case 2:
// code 2
break;
case 3:
// code 3
break;
case 4:
case 5:
// etc.
break;
}
实际上只有一个变量在变化。我不知道这是从哪里来的,但是你可以把它们都放入某种数据结构中,比如数组,然后写一个循环,它正好做你想做的事情。
每当你遇到这样的情况,看看你有什么,什么是真正的变化。如果你想解决这样的问题,循环通常是你想要开始寻找的地方。
如果所有日期都可以是'0000-00-00',那么循环是不可避免的。
$dates = array($dateOne, $dateTwo ...);
foreach ($dates as $date) {
if($today >= $date && $dateOne != '0000-00-00') {
// run some code
break;
}
}
然而,如果这些日期来自mysql数据库,您必须使用查询来确定是否必须运行一些代码。
所以,你最好描述一个你想要实现的真实任务,然后从SQL查询中得到正确的答案。
应该是
SELECT min(date) FROM table WHERE date <> '0000-00-00' AND [other conditions]
然后比较返回值,就像这样
if ($row && $today >= $row['date']) {
function validate($date) {
return $today >= $date && $date != '0000-00-00';
}
$dates = [$dateOne, $dateTwo, $dateThree, $dateFour];
if(count($filtered = array_filter($dates, 'validate'))) {
$date = $filtered[0]; // This is the date that triggered the first IF in your code
// run some code
}
else {
// run this code
}