You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:57:00