您的位置:首页 > 其它

按小时统计数据,无数据的时间点填充为0的实现方法

2013-05-07 15:59 477 查看
最近遇到一个业务逻辑:俺小时查询某段时间的订单发货量,DB里边是按照小时来存的数据,如:



从数据库里查出来以后,并将数据处理成此种格式:

Array
(
[XX1配送中心] => Array
(
[2013-04-01 11:00:00] => 2
[2013-04-01 12:00:00] => 710
[2013-04-01 13:00:00] => 35
[2013-04-01 14:00:00] => 501
[2013-04-01 15:00:00] => 851
[2013-04-01 16:00:00] => 678
[2013-04-01 17:00:00] => 693
[2013-04-01 18:00:00] => 929
[2013-04-01 19:00:00] => 31
)

[XX2配送中心] => Array
(
[2013-04-01 11:00:00] => 890
[2013-04-01 12:00:00] => 1002
[2013-04-01 13:00:00] => 46
[2013-04-01 14:00:00] => 1
[2013-04-01 15:00:00] => 382
[2013-04-01 16:00:00] => 154
[2013-04-01 17:00:00] => 314
[2013-04-01 18:00:00] => 255
[2013-04-01 19:00:00] => 1
)

[XX3配送中心] => Array
(
[2013-04-01 13:00:00] => 726
[2013-04-01 14:00:00] => 737
[2013-04-01 15:00:00] => 686
[2013-04-01 16:00:00] => 660
[2013-04-01 17:00:00] => 604
[2013-04-01 18:00:00] => 103
[2013-04-01 19:00:00] => 13
)

[XX4配送中心] => Array
(
[2013-04-01 14:00:00] => 74
[2013-04-01 15:00:00] => 289
[2013-04-01 16:00:00] => 242
[2013-04-01 17:00:00] => 211
[2013-04-01 18:00:00] => 228
[2013-04-01 19:00:00] => 99
)

)
查询出来的数据要求按照图表显示,但是每个时间点都要显示,数据库里边没有的时间要填充为0。

最后听广哥建议,用下面的方法实现。

-----------------------------------------------------------------------------------------------------------------

$startTime=date('Y-m-d H:00:00',  strtotime($stime));
$arr=array();//先创建所有时间点值都为0的一个数组
$temp=0;
for($i=$startTime;  strtotime($i)<strtotime($etime);$i=date("Y-m-d H:i:s", strtotime("$i +1 hours"))){
$arr[$i]=0;
$temp++;
}
foreach ($data as $key=>$value) {//用array_merge()合并数组
$arr_temp=array_merge($arr,$value);
$data[$key]=$arr_temp;
}
此处附array_merge()的方法说明:

array array_merge ( array array1 [, array array2 [, array ...]] )

array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐