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();`
使用下面的 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();`