【发布时间】:2018-01-31 01:00:21
【问题描述】:
我有以下代码,其中 $Clinics 是一个多维对象数组,格式如下:
Array
(
[0] => Clinics Object
(
[PlanID] => 1
[id] => 1
[ClinicCode] => X123ABCD1
[ClinicDesc] => Test Description
[SchDay] => Monday
[SchWeek] =>
[SchWeekBetween] => 1
)
[158] => Clinics Object
(
[PlanID] => 1
[id] => 159
[ClinicCode] => Y234BCDE2
[ClinicDesc] => Test Description
[SchDay] => Monday
[SchWeek] =>
[SchWeekBetween] => 1
)
)
我正在使用下面的代码循环遍历每个对象,从每周一次的计划日 (SchDay) 开始,如果 SchDay 是每天,则每天一次。
$StartDate = new DateTimeImmutable("2018-04-01");
$EndDate = new DateTimeImmutable("2019-03-31");
$Output = array();
foreach ($Clinics as $Clinic) {
// Set First Date of loop period
if ($Clinic->SchDay == "Daily") {
$ClinicStartDate = $StartDate->format("d-m-Y");
$SchCount = "+1 day";
} else {
$ClinicStartDate = "First ".$Clinic->SchDay." of ".$StartDate->format("F Y");
$SchCount = "+7 days";
}
// Loop through Dates and add to array
for($i = new DateTime($ClinicStartDate); $i <= $EndDate; $i->modify($SchCount)){
$Clinic->Date = $i;
$Output[] = $Clinic;
}
};
print_r($Output);
我遇到的问题是,当我打印数组时,每个诊所迭代的 Date 值都是相同的 - 循环的最后一个日期,并且数组没有按照 for 循环捕获每个 DateTime。我想我理解它为什么这样做,但我不知道如何解决它。
【问题讨论】:
-
那是因为您将新的日期时间实例化一次,然后对其进行修改。因此,每次您将 Date 分配给
$i时,您都在分配它的参考。无论它最终在循环结束时是什么,它们都将引用它,因为它们都在引用一个对象。