-1

ユーザーが入力した日付から 3 日さかのぼって $startdate を設定したいのですが、これらの 3 日は休日ではありません。

したがって、ユーザーによる入力日が 10 月 22 日の場合、$startdate は 10 月 19 日ではなく 10 月 17 日になります。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;

何故ですか?

4

3 に答える 3

0

結果がTRUEと解釈されるDBクエリを作成するだけです。多分私は間違っているかもしれませんが、ループの繰り返しごとに同じデータベースクエリを作成しているようです。したがって、クエリを確認してください。たとえば、休日の確認のために特定の日付を追加してください。

于 2013-10-16T06:45:18.563 に答える
0

これが常に true の場合:

if($query->result_array()){
}

次に、これは常に true になります。

}while($i <= 3); //$i is never adjusted, so it will always be less than 3

過去 3 日間のデータを表示したいということですが、間に休日がある場合はカウントしたくありません。これを回避するには、リテラルの「3」を使用しないでください。調整できるため、変数でもある必要があります。

可能な解決策は、次のような変数を持つことです。

$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

次に、whileループを行うための以下のようなもの:

   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);
于 2013-10-16T06:50:15.190 に答える