PHP 从 while 循环中将四个日期放入一个数组中

PHP putting four dates in an array from a while loop

使用下面的 while 循环,我在 echo 中得到了四个日期,这正是我需要的。

$data = [];

$start = Carbon::createFromDate('2016', '04', '01');
$end = Carbon::createFromDate('2017', '04', '01');

while($start < $end)
{
    $data[] = $start;

    echo $start;

    $start->addMonths('3');
}

输出:

2016-04-01
2016-07-01
2016-10-01
2017-01-01

但是当我转储 $data[] 数组时,我只得到四个集合,每个集合都有相同的日期:

2017-04-01

我做错了什么?我只想把上面四个日期放在一个数组中。

您正在为每个数组条目(对象是 "by reference")分配一个对象实例($start),并修改该对象实例,因此同一个对象实例在任何地方都被更改....将 "clone" 分配给您的数组

while($start < $end)
{
    $data[] = clone $start;
    echo $start;
    $start->addMonths('3');
}

就这样做

echo $start;

 $start =   $start->addMonths('3');

您没有正确创建数组。

`$data = []`

应该是

`$data = array();`