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

すべての日付が '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 に答える
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

実際に変化している変数は 1 つだけです。これがどこから来たのかはわかりませんが、それらすべてを配列などのある種のデータ構造に入れ、やりたいことを正確に行うループを書くことができます。

このような状況に出くわしたときはいつでも、自分が持っているものと実際に何が変わったのかを見てください. ループは、通常、このような問題を解決しようとしている場合に探し始める場所です。

于 2013-01-17T10:37:46.530 に答える
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 に答える