2017-03-22 14 views
1

昇順の日付オブジェクトで構成される配列を作成したいと思います。私は、次のコードを試してみました:php:日付オブジェクトを昇順に配列を作成する

$dat=date_create_from_format("Y-m-d H:i:s", "2014-11-01 00:00:00"); 
for ($i=0; $i<=2; $i++) { 
    $ar[$i]=$dat; 
    $dat->modify('+1 day'); 
} 
print_r($ar); 

結果は3回同じ日である:

Array 
(
    [0] => DateTime Object 
     (
      [date] => 2014-11-04 00:00:00.000000 
      [timezone_type] => 3 
      [timezone] => Europe/Berlin 
     ) 

    [1] => DateTime Object 
     (
      [date] => 2014-11-04 00:00:00.000000 
      [timezone_type] => 3 
      [timezone] => Europe/Berlin 
     ) 

    [2] => DateTime Object 
     (
      [date] => 2014-11-04 00:00:00.000000 
      [timezone_type] => 3 
      [timezone] => Europe/Berlin 
     ) 

) 

しかし、私は取得したいと思いです:

Array 
    (
     [0] => DateTime Object 
      (
       [date] => 2014-11-01 00:00:00.000000 
       [timezone_type] => 3 
       [timezone] => Europe/Berlin 
      ) 

     [1] => DateTime Object 
      (
       [date] => 2014-11-02 00:00:00.000000 
       [timezone_type] => 3 
       [timezone] => Europe/Berlin 
      ) 

     [2] => DateTime Object 
      (
       [date] => 2014-11-03 00:00:00.000000 
       [timezone_type] => 3 
       [timezone] => Europe/Berlin 
      ) 

    ) 

誰かがアイデアを持って?おそらく初心者のこと;-)

答えて

1

$datはオブジェクトで、$arのすべてのアイテムはこのオブジェクトへの参照を格納します。したがって、このオブジェクトが変更されると($dat->modify())、すべての参照でこの変更がただちに表示されます。別のオブジェクトを作成するには、することができますcloneソースオブジェクト:

$dat = date_create_from_format("Y-m-d H:i:s", "2014-11-01 00:00:00"); 
for ($i = 0; $i <= 2; $i++) { 
    $ar[$i] = clone $dat; 
    $dat->modify('+1 day'); 
} 
print_r($ar); 

ここcloneオペレータは、あなたの現在の$datオブジェクトを取り、それのコピーを作成します。したがって、$datを再度変更すると、コピーはそのことについて認識しません。

関連する問題