【问题标题】:PHP uses references in for-loopPHP 在 for 循环中使用引用
【发布时间】:2021-11-06 09:32:20
【问题描述】:

我正在循环通过一个 for 循环来用日期填充一个数组。每次迭代我都想将日期变量增加一天。

$myDate = date_create(date_default_timezone_get());
$myArr;
for ($i = 0; $i <= 1; $i++) {
    $myArr[$i] = $myDate;
    $myDate->modify('+1 day');
}

如果当前日期是 2021 年 11 月 6 日,它将返回给我什么:

echo date_format($myArr[0], 'd.m.Y'); //08.11.2021
echo date_format($myArr[1], 'd.m.Y'); //08.11.2021

我希望它返回 06.11.202107.11.2021 但它似乎使用某种引用而不是我的数组中的值。谁能解释一下?

【问题讨论】:

  • 在 PHP 中,与许多其他语言一样,对象是通过引用传递的。因此,您正在添加和修改同一个对象实例。请检查clone 运算符。
  • "似乎它使用了某种引用" -- 使用php.net/manual/en/function.spl-object-id 找出自己。
  • 我不太习惯 PHP 编程,但我发现了这个帖子,并认为这通常很重要:stackoverflow.com/questions/879/…
  • 如果您不再需要日期对象,您应该在循环中格式化日期并将格式化的字符串分配给您的数组。

标签: php date


【解决方案1】:

您应该创建一个新日期并将其分配给数组试试这个

<?php
$myDate = date_create(date_default_timezone_get());
$myArr;
for ($i = 0; $i <= 4; $i++) {
    $myArr[$i] = date_create(date_format($myDate,'d.m.Y'));
    $myDate->modify('+1 day');
}

echo "<pre>";
print_r($myArr);
echo "</pre>";
?>

结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2013-12-21
    • 2012-10-20
    • 2019-01-06
    • 2019-03-12
    • 1970-01-01
    • 2015-01-28
    • 2016-09-05
    相关资源
    最近更新 更多