我想动态更改条件,具体取决于表是否为空。
如果表是空的,它应该记录昨天的所有数据,如果不是空的,它应该记录今天的数据。
我目前的代码无效:
$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;
}
}
答案 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;
}
}