猿问

php怎么将序列化数组内的日期 填补不存在的日期

从数据库查询的时间是不连续的 如

前端的图表需要连续的日期 但是数据库中 不存在不存在连续的时间
php需要处理为一个月内连续的时间 如:
[2017.08.25,2017.08.26,2017.08.27,2017.08.28]
[4,-,5,6,7,8]
将data替换为-即可 不知道怎么处理 求各位大神 支招

拉风的咖菲猫
浏览 457回答 2
2回答

凤凰求蛊

<?php $data = array( 'date' => array( '2017.08.24', '2017.08.26', '2017.08.28', '2017.08.30', '2017.08.31' ), 'data' => array( 1, 2, 3, 4, 5 ) ); $len = count($data['date']); $oneDaySecond = 86400; $newData = array(); for ($i = 1; $i < $len; $i++) { $previous = strtotime(str_replace('.', '-', $data['date'][($i - 1)])); $current = strtotime(str_replace('.', '-', $data['date'][($i)])); $diff = $current - $previous; if (!in_array($data['date'][($i - 1)], $newData['date'], true)) { $newData['date'][] = $data['date'][($i - 1)]; $newData['data'][] = $data['data'][($i - 1)]; } if ($diff > $oneDaySecond) { for ($m = $previous + $oneDaySecond; $m < $current; $m += $oneDaySecond) { $newData['date'][] = date('Y.m.d', $m); $newData['data'][] = 0; } } $newData['date'][] = $data['date'][$i]; $newData['data'][] = $data['data'][$i]; } print_r($newData); result Array ( [date] => Array ( [0] => 2017.08.24 [1] => 2017.08.25 [2] => 2017.08.26 [3] => 2017.08.27 [4] => 2017.08.28 [5] => 2017.08.29 [6] => 2017.08.30 [7] => 2017.08.31 ) [data] => Array ( [0] => 1 [1] => 0 [2] => 2 [3] => 0 [4] => 3 [5] => 0 [6] => 4 [7] => 5 ) )

SMILET

假如你获得到的数据为:data = {"8.11":100, "8.15":100, "8.20":100 }你新建一个从初始日期到结束日期的对象:newData = {"8.11":0, "8.12":0, "8.13":0, ···, "8.20":0}然后遍历data,将data里面的数据按照放进newData对应的位置,这样就得到一个连续的、数据库没有的日期数据为0的新对象,然后把这个新数据返回出去。这一步前端和后端做都可以,反正就是没有的你就给补上0
随时随地看视频慕课网APP
我要回答