【问题标题】:PHP putting four dates in an array from a while loopPHP将四个日期从while循环中放入一个数组中
【发布时间】:2016-12-02 13:41:28
【问题描述】:

使用下面的 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

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

【问题讨论】:

    标签: php arrays for-loop while-loop php-carbon


    【解决方案1】:

    您正在为每个数组条目分配一个对象实例($start)(并且对象是“通过引用”),并修改该对象实例,因此无论在哪里都在更改相同的对象实例......分配一个“克隆”到你的数组中

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

    【讨论】:

    • 是的,就是这样,非常感谢你帮我解决这个问题,我不知道 :)
    【解决方案2】:

    就这样做

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

    【讨论】:

      【解决方案3】:

      您没有正确创建数组。

      `$data = []`
      

      应该是

      `$data = array();`
      

      【讨论】:

      • 短数组语法在现代 PHP 中完全有效(现代 >= PHP 5.4.0,即自 2012 年 3 月起)
      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 2016-04-11
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多