我想让一个$ startdate从用户的输入日期向后计算3天,其中这3天不是假期。
因此,如果用户的输入日期是10月22日,则$ startdate将是10月17日而不是10月19日。因为10月19日和20日是假期
$i = 1;
do{
//some code to produce the $startdate
//...
//end
//check if $startdate is holiday or not
$this->db->where('hl_date',$startdate);
$query = $this->db->get('php_ms_holiday');
//if $startdate = holiday, it doesn't count
if($query->result_array()){
}
else{
$i++;
}
}while($i <= 3);
但是,使用该代码,当if($query->result_array())
语句中捕获$ startdate时,我会在浏览器上进行不间断加载。当我在if($query->result_array())
语句中放入类似下面的代码时,浏览器只能返回结果:
$i = $i + n; //n is a number starting from 1, or
$i++;
但不是:
$i = $i; //or
$i = $i + 0;
为什么?
答案 0 :(得分:0)
if($ query-&gt; result_array())将始终评估为true,如果您的查询已正确制定。因此,如果返回的行数为0.这意味着你永远不会去其他地方。你if语句应该检查返回的结果数量;此外,我个人更喜欢正常的for循环:
for($i = 0; $i < 3)
{
//some code to produce the $startdate
//...
//end
//check if $startdate is holiday or not
$this->db->where('hl_date',$startdate);
$query = $this->db->get('php_ms_holiday');
//if $startdate = holiday, it doesn't count
if [num_rows equals 0] // test num_rows here; Not sure what your class offers here
{
$i++; // increment counter
// do whatever else you want to do
}
}
答案 1 :(得分:0)
您只需进行数据库查询,结果解释为TRUE。也许我错了,但似乎你在每个循环迭代中都进行相同的db查询。 因此,请检查您的查询,例如添加假日检查的特定日期。
答案 2 :(得分:0)
如果始终如此:
if($query->result_array()){
}
然后这将永远是真的:
}while($i <= 3); //$i is never adjusted, so it will always be less than 3
由于您说要显示最近3天的数据,但如果有假期,则您不想计算它们。为了解决这个问题,我认为你不应该使用文字&#34; 3&#34;因为它可以调整,它也应该是一个变量。
可能的解决方案是拥有一个变量,例如:
$days_back = 3;
然后尝试计算过去3天内的假期数量(或类似的数量):
//You can make the holidays to be zero by default
$holidays = someWayToCountHolidays($startDate, $endDate); //You'll obviously have to code this
然后你可以使变量你的while循环再次起作用
$num_days = $days_back + $holidays; //$holidays can be zero by default
然后在循环中执行类似下面的操作:
if($query->result_array()){
//Then do what ever you want to do here
} else {
//Then do what ever you want to do here
}
$i++; //Adjust $i
}while($i <= $num_days);