PHP for循环中给数组赋值日期对象出现元素值重复问题
现象原因
date_create() 返回的是 DateTime 类对象,PHP 中对象默认按引用传递赋值,你遇到的问题本质就是所有数组元素存储的都是同一个对象的引用:
- 执行
$myArr[$i] = $myDate时,并没有复制当前日期的实际值存入数组,只是把同一个对象的内存地址存到了数组对应下标位 - 后续调用
$myDate->modify('+1 day')是直接修改该对象的内部日期值,数组中所有指向该对象的引用读取到的自然都是修改后的最终结果。你循环执行了2次修改操作,最终对象日期为2021年11月8日,所以两个元素输出完全相同。
修复方案
每次存入数组时克隆当前 DateTime 对象生成独立副本即可,修改后代码如下:
$myDate = date_create(date_default_timezone_get()); $myArr = []; for ($i = 0; $i <= 1; $i++) { $myArr[$i] = clone $myDate; $myDate->modify('+1 day'); }
修改后运行输出即可得到你预期的结果:
echo date_format($myArr[0], 'd.m.Y'); // 06.11.2021 echo date_format($myArr[1], 'd.m.Y'); // 07.11.2021
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

