php - 在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++;
}
如果这个问题在某处已经有了答案,那么不要忘记将其标记为重复。
解决方案
您可以使用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
)
推荐阅读
- java - “文本/事件流”和“应用程序/流+json”有什么区别
- excel - 如何根据 For 语句将一系列单元格复制到另一列
- java - Hibernate elasticsearch音译(ICU变换)
- x86 - 如何使用 x86 SIMD 有效地将 8 位位图转换为 0/1 整数数组
- python - 了解python for循环,将对象用作索引?
- python - 一旦互联网关闭,python脚本就会停止并且不会重新启动
- java - Eclipse 打印错误的西里尔字符
- ms-access - 根据第二个的值在一个表中查找匹配的行
- javascript - 使用 Javascript/Jquery 的 Wordpress 短代码
- heroku - Heroku 以编程方式配置应用程序