首页 > 解决方案 > 在PHP中的日期数组中填充空日期

问题描述

我在 codeigniter 中有一个数组,如下所示。如下所示,日期之间有一些空格。4 月 1 日之后是 3 日,之后是 10 日,以此类推。

 Array
    (
        [2019-04-01] => 1
        [2019-04-03] => 3
        [2019-04-10] => 8
        [2019-04-15] => 1
    )

我需要那些空日期有一个值'0',所以最后,数组将如下所示:

    Array
            (
       [2019-04-01] => 1
       [2019-04-02] => 0
       [2019-04-03] => 3
       [2019-04-04] => 0
       [2019-04-05] => 0
       [2019-04-06] => 0
       [2019-04-07] => 0
       [2019-04-08] => 0
       [2019-04-09] => 0
       [2019-04-10] => 8
       [2019-04-11] => 0
       [2019-04-12] => 0
       [2019-04-13] => 0
       [2019-04-14] => 0
       [2019-04-15] => 1
            )

数组的第一个和最后一个index将作为范围工作。

到目前为止,我已经尝试过

使用这种方法,但这似乎不起作用。在下面的代码中,testArr是上面发布的数组

                $i=0;    
                foreach ($testArr as $key => $value) {

                if($i==count($testArr)-1){break;}

                $currentDay=new DateTime($key);
                $nextDay=new DateTime(array_keys($testArr)[$i]);


                $diff=date_diff($nextDay,$currentDay);
                $diffint=intval($diff->format("%a"));
                if($diffint!==1){
                    $currentDay->modify('+1 day');
                    $temp=array($currentDay->format('Y-m-d')=>0);
                    $testArr = $this->insertArrayAtPosition($testArr,$temp,$i);
                }

                $i++;
            }


如果这个问题在某处已经有了答案,那么不要忘记将其标记为重复。

标签: phparrays

解决方案


您可以使用DatePeriod来获取数组的第一个键和最后一个键之间的范围。

$arr = array(
    "2019-04-01" => 1,
    "2019-04-03" => 3,
    "2019-04-10" => 8,
    "2019-04-15" => 1,
);

$keys = array_keys( $arr );
$start = new DateTime($keys[0]);
$stop = new DateTime($keys[ count( $keys ) - 1 ]);
$stop->modify('+1 day');

$range = new DatePeriod($start, new DateInterval('P1D'), $stop);
$result = array();

foreach ($range as $key => $value) {
    $date = $value->format('Y-m-d');

    if ( isset( $arr[ $date ] ) ) $result[ $date ] = $arr[ $date ];
    else $result[ $date ] = 0;
}

这将导致:

Array
(
    [2019-04-01] => 1
    [2019-04-02] => 0
    [2019-04-03] => 3
    [2019-04-04] => 0
    [2019-04-05] => 0
    [2019-04-06] => 0
    [2019-04-07] => 0
    [2019-04-08] => 0
    [2019-04-09] => 0
    [2019-04-10] => 8
    [2019-04-11] => 0
    [2019-04-12] => 0
    [2019-04-13] => 0
    [2019-04-14] => 0
    [2019-04-15] => 1
)

推荐阅读