PHP push_array对象显示相同的值

时间:2019-03-05 16:07:46

标签: php arrays

我正在尝试使用php datetime对象(使用代码)将2018年1月6日的年月日延长至一天

function getMonths(){
    $st_date = new DateTime('2019-01-01');
    $yms = array($st_date);
    while($st_date < new DateTime()){
        array_push($yms, $st_date->add(new DateInterval('P1M')));
    }
    print_r($yms);
}

但是输出在$ yms数组中的所有项目上显示相同的值

Array
(
[0] => DateTime Object
    (
        [date] => 2019-03-01 00:00:00
        [timezone_type] => 3
        [timezone] => Asia/Kolkata
    )

[1] => DateTime Object
    (
        [date] => 2019-03-01 00:00:00
        [timezone_type] => 3
        [timezone] => Asia/Kolkata
    )
....

)

1 个答案:

答案 0 :(得分:2)

您将对同一对象的引用推入数组。结果,所有项目都显示相同的时间。使用克隆根据源对象数据创建新对象

 function getMonths(){
    $st_date = new DateTime('2019-01-01');
    $yms = array(clone $st_date);
    while($st_date < new DateTime()){
        array_push($yms, clone $st_date->add(new DateInterval('P1M')));
    }
    print_r($yms);
}

demo

Object Cloning