do-while在php中导致不间断的页面加载

时间:2013-10-16 06:27:03

标签: php do-while

我想让一个$ 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;

为什么?

3 个答案:

答案 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);