2016-07-02 5 views
0

do whileの条件は、配列に10個の要素が含まれるまで-1日後に戻ることができますか?do while:条件が真になるまで-1日後に戻る

は、ここに私のテストコードです:

$date = '2016-01-24'; 

$array = []; 

$i = 0; 

do { 

    $days_back = '-' . $i++ . ' day'; 

    $date = new DateTime($date); 
    $date->modify($days_back); 
    $date = $date->format('Y-m-d'); 

    echo '<br /> $date: ' . $date . ' // $days_back: ' . $days_back . ' // $i: ' . $i . '<br />'; 

    array_push(
     $array, 
     array($date), 
     array($days_back) 
    ); 

} while (count($array) < 10); 

はここに私の出力です:

$date: 2016-01-24 // $days_back: -0 day // $i: 1 
$date: 2016-01-23 // $days_back: -1 day // $i: 2 
$date: 2016-01-21 // $days_back: -2 day // $i: 3 
$date: 2016-01-18 // $days_back: -3 day // $i: 4 
$date: 2016-01-14 // $days_back: -4 day // $i: 5 

しかし$dateの出力は、ここで間違っています。それは実行の間に高すぎる飛び越しますが、線形でなければなりません:24,23,22,21など

+0

元の日付を - $ i日で修正するか、現在の日付を-1日だけ修正する必要があります。単純ですね。 – rjdown

+0

@ rjdown:はい、あなたは正しいです。日付の-1日は私が必要なすべてです。 – Lee

+0

あなたは何をしているのか考えてみましょう。それぞれの反復のために '$ date'変数を新しい日付に設定しています。したがって、3日を引くと、 '2016-01-21'からそれを減算し、元の日付は' 2016-01-24'ではないので、次の日付は18日です。 – Andy

答えて

0

$ date変数の名前を2か所で変更するだけです。コードはこちら

$currentDate = '2016-01-24'; 
$array = []; 
$i = 0; 
do { 
    $days_back = '-' . $i++ . ' day'; 
    $date = new DateTime($currentDate); 
    $date->modify($days_back); 
    $date = $date->format('Y-m-d'); 
    echo '<br /> $date: ' . $date . ' // $days_back: ' . $days_back . ' // $i: ' . $i . '<br />'; 
    array_push(
     $array, 
     array($date), 
     array($days_back) 
    ); 
} while (count($array) < 10); 
関連する問題