如果条件动态改变

时间:2017-01-13 03:30:19

标签: php if-statement dynamic

我想动态更改条件,具体取决于表是否为空。

如果表是空的,它应该记录昨天的所有数据,如果不是空的,它应该记录今天的数据。

我目前的代码无效:

$db->get('history');
$emptyTable = $db->count; // This return 0 or 1
$condition = setCondition($emptyTable);

foreach($extract as $trade) {
  $date = strtotime($trade['Date']);
  $today = strtotime(date("d/m/Y"));

  if($condition) {
    // do something
  }
}

function setCondition($bool) {
  switch ($bool) {
    case 1:
      return $date == $today;
      break;
    case 0:
      return $date < $today;
      break;
  }
}

2 个答案:

答案 0 :(得分:0)

你的条件本身需要调用一个返回布尔值的函数。这就是您的setCondition函数所做的事情:

function setCondition($bool) {
  switch ($bool) {
    case 1:
      return $date == $today;
      break;
    case 0:
      return $date < $today;
      break;
  }
}

由于它没有设置任何内容,我建议您将其重命名为evaluateCondition

此后,您可以直接将此函数称为条件:

if(evaluateCondition($booleanVariableToTest)) {
    // do something
}

关于为什么你的代码不起作用:你基本上在开始时评估$condition

$condition = setCondition($emptyTable);

之后,$condition永远不会改变。因此,它不会动态重新评估。

修改

通过阅读您的评论,我了解您实际上并未尝试动态评估条件,但静态评估条件,具体取决于其他参数(即{{1} }和$date)。

您的函数需要将这些变量作为参数,因此它们的名称实际上意味着此函数范围内的某些内容。正确的代码是:

$today

在这种情况下,您无需在每次迭代时调用function setCondition($bool, $date, $today) { switch ($bool) { case 1: return $date == $today; break; case 0: return $date < $today; break; } } 函数,因此您的setCondition测试仍然存在:

if

答案 1 :(得分:0)

您没有将$date$today传递给您的函数并在foreach中调用它并将返回部分包含在setCondition中,以便它返回字符串..

 foreach($extract as $trade) {
      $date = strtotime($trade['Date']);
      $today = strtotime(date("d/m/Y"));
      $condition = setCondition($emptyTable,$today,$date);
   // echo $condition//condition string
      if($condition) {
        // do something
      }
    }


function setCondition($bool,$today,$date) {
  switch ($bool) {
    case 1:
      return "'$date' == '$today'";
      break;
    case 0:
      return "'$date' < '$today'";
      break;
  }
}

DEMO