PHP 在 for 循环中向数组添加新值
PHP adding new values to an array in for loop
你能告诉我我在我的代码中犯的错误吗,它看起来是这样的:
$arrayOfDays = array();
for($dayIterator=$from; $dayIterator < $to; $dayIterator->modify('+1 day')){
$arrayOfDays[] = $dayIterator;
}
print_r($arrayOfDays);
打印出这样的结果:
Array ( [0] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [1] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [2] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [3] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [4] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [5] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [6] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [7] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [8] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [9] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [10] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [11] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [12] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [13] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [14] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [15] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [16] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [17] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [18] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [19] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [20] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [21] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [22] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [23] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [24] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [25] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [26] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [27] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [28] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) )
其中 $from 设置为月初,$to 设置为月末。
当我在循环中打印 $dayIterator 时,它给了我正确的日期,但完成后整个数组都填满了最后一天!!
我不知道为什么它会那样工作:(
这是因为您使用的是同一个对象,而不是实例化一个新对象。
每次迭代只调用一个新实例:
$dayIterator = new DateTime(/* --- */);
也许你可以尝试不同的方法,比如 DatePeriod
您需要提供的是:
- Start/End DateTime 对象和 DateInterval 对象。
快速示例:
<?php
$range = new DatePeriod(
new DateTime('2015-01-01'),
new DateInterval('P1D'),
new DateTime('2015-01-31 23:59:59')
);
foreach($range as $dateTime) {
print $dateTime->format('d M Y') . '<br>';
}
P1D 在 DateInterval 中表示 - Period 1 Day
第二个日期时间对象中 23:59:59 的原因是,如果您想在日期范围内包含最后一个日期,则必须至少添加 1 秒给你的对象。
希望你明白了。
你能告诉我我在我的代码中犯的错误吗,它看起来是这样的:
$arrayOfDays = array();
for($dayIterator=$from; $dayIterator < $to; $dayIterator->modify('+1 day')){
$arrayOfDays[] = $dayIterator;
}
print_r($arrayOfDays);
打印出这样的结果:
Array ( [0] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [1] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [2] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [3] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [4] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [5] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [6] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [7] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [8] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [9] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [10] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [11] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [12] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [13] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [14] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [15] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [16] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [17] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [18] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [19] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [20] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [21] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [22] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [23] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [24] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [25] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [26] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [27] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) [28] => DateTime Object ( [date] => 2015-04-30 00:00:00 [timezone_type] => 3 [timezone] => Europe/Paris ) )
其中 $from 设置为月初,$to 设置为月末。 当我在循环中打印 $dayIterator 时,它给了我正确的日期,但完成后整个数组都填满了最后一天!! 我不知道为什么它会那样工作:(
这是因为您使用的是同一个对象,而不是实例化一个新对象。
每次迭代只调用一个新实例:
$dayIterator = new DateTime(/* --- */);
也许你可以尝试不同的方法,比如 DatePeriod
您需要提供的是:
- Start/End DateTime 对象和 DateInterval 对象。
快速示例:
<?php
$range = new DatePeriod(
new DateTime('2015-01-01'),
new DateInterval('P1D'),
new DateTime('2015-01-31 23:59:59')
);
foreach($range as $dateTime) {
print $dateTime->format('d M Y') . '<br>';
}
P1D 在 DateInterval 中表示 - Period 1 Day
第二个日期时间对象中 23:59:59 的原因是,如果您想在日期范围内包含最后一个日期,则必须至少添加 1 秒给你的对象。
希望你明白了。