0

而不是这个:

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陈述更好的方法。

4

4 回答 4

1
$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;
}
于 2013-01-17T10:37:08.590 回答
1

你只有一个变量实际上在变化。我不知道这是从哪里来的,但是您可以将它们全部放入某种数据结构中,例如数组,然后编写一个完全按照您希望它执行的操作的循环。

每当你遇到这样的情况时,看看你拥有什么以及实际发生了什么变化。如果您试图解决这样的问题,循环通常是您想要开始寻找的地方。

于 2013-01-17T10:37:46.530 回答
1

好吧,如果所有日期都可以是“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']) {
于 2013-01-17T10:47:25.167 回答
0
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
}
于 2013-01-17T10:39:40.517 回答