如何将日期间隔(date span)结果附加到PHP数组中?

如何将日期间隔(date span)结果附加到PHP数组中?,php,Php,循环时的记录集显示关联数组的结果。 [date]=开始日期和[dateLast]=结束日期 结果: 2019-01-19 - 2019-01-22 2019-01-19 - 2019-01-23 2019-01-20 - 2019-01-25 2019-01-22 - 2019-01-25 2019-01-27 - 2019-01-30 2019-01-29 - 2019-01-31 2019-02-01 - 2019-02-05 每行指定一个预订开始和结束日期。我想生成一个在日历中使用的唯一

循环时的记录集显示关联数组的结果。 [date]=开始日期和[dateLast]=结束日期

结果:

2019-01-19 - 2019-01-22
2019-01-19 - 2019-01-23
2019-01-20 - 2019-01-25
2019-01-22 - 2019-01-25
2019-01-27 - 2019-01-30
2019-01-29 - 2019-01-31
2019-02-01 - 2019-02-05
每行指定一个预订开始和结束日期。我想生成一个在日历中使用的唯一逗号分隔日期列表

循环相同的记录集,我试图创建一个包含所有实际日期(开始、结束和介于两者之间)的数组

当我循环一个记录集时,我首先使用第一个开始和结束日期,并将它们放入一个数组中。 然后使用array_push使用每个记录的开始和结束日期更新该数组。然后使用array_unique仅保留唯一值

        <?php
    $wa_startindex = 0;
    while(!$reservALL->atEnd()) {
      $wa_startindex = $reservALL->Index;
    ?>

            <?php   
            $startDate = ($reservALL->getColumnVal("date")); 
            $endDate = ($reservALL->getColumnVal("dateLast")); 

            $format = "Y-m-d";

            $begin = new DateTime($startDate);
            $end = new DateTime($endDate);

            $interval = new DateInterval('P1D'); // 1 Day
            $dateRange = new DatePeriod($begin, $interval, $end);

            $range = [];
            foreach ($dateRange as $date) {
                $range[] = $date->format($format);
                $result = array_unique($range, SORT_REGULAR);
            }
            ?>
            <?php
      $reservALL->moveNext();
    }
    $reservALL->moveFirst(); //return RS to first record
    unset($wa_startindex);
    unset($wa_repeatcount);
    ?>
问题是如何将数组附加到array\u push?似乎是写得太多而不是附加

更新以显示最终正确代码:

<?php
    $wa_startindex = 0;
    $range = []; // declare Arry
    while(!$reservALL->atEnd()) {
      $wa_startindex = $reservALL->Index;
?>

            <?php   
            $startDate = ($reservALL->getColumnVal("date")); 
            $endDate = ($reservALL->getColumnVal("dateLast")); 

            $format = "m-d-Y";

            $begin = new DateTime($startDate);
            $end = new DateTime($endDate);

            $interval = new DateInterval('P1D'); // 1 Day
            $dateRange = new DatePeriod($begin, $interval, $end);

            foreach ($dateRange as $date) {
                $range[] = $date->format($format);
            }
         array_push($range, $result);
            ?>
<?php
      $reservALL->moveNext();
    }
$result = array_filter(array_unique($range)); // array_filter removes any empty records
    $reservALL->moveFirst(); //return RS to first record
    unset($wa_startindex);
    unset($wa_repeatcount);
?>

今天的日期是“01-19-2019”,这表明它可能与日期间隔(“P1D”)有关。

您的第一个问题是,在循环的每一次循环中,您都要用此行重写
$range

$range = [];
你应该把那条线移到环外。i、 e

$wa_startindex = 0;
$range = [];
while(!$reservALL->atEnd()) {
    ...
将数据推送到
$range
中也有问题。您正在将数组而不是单个值推入其中。更改此代码:

foreach ($dateRange as $date) {
    $range[] = $date->format($format);
    $result = array_unique($range, SORT_REGULAR);
}
array_push($range, $result);

然后在循环结束时,调用
array\u unique

    ...
}
$range = array_unique($range);
$reservALL->moveFirst(); //return RS to first record

这是可行的,但只有一条空记录(不知道为什么)。解决方案是将数组_filter()添加到$result---$result=array_filter(array_unique($range))@伯恩多兹,这真的很奇怪。推入
$range
的唯一值应该是格式化日期,因为它们是从
DatePeriod
对象生成的,所以它们都应该是有效的。。。可能值得启用
通知
级别错误的错误报告,以查看是否显示了某些内容错误报告没有显示任何内容,但我相信问题与今天的日期有关,因为只有一个空结果。我将更新原始帖子,以在中显示此内容context@Burndogz刚刚注意到您仍然有
array\u push($range,$result)在您的代码中。应该不再存在了。是的,移除了数组\u推送,空结果消失了!
foreach ($dateRange as $date) {
    $range[] = $date->format($format);
    $result = array_unique($range, SORT_REGULAR);
}
array_push($range, $result);
foreach ($dateRange as $date) {
    $range[] = $date->format($format);
}
    ...
}
$range = array_unique($range);
$reservALL->moveFirst(); //return RS to first record