关于PHP组织密度不统一数据的系列问题
小弟能力有限,在做一个小项目时碰见了一个问题,希望大家能帮助一下。
数据库cfg_hisdata表用于存放采集到的设备历史参数信息,其中有三个关键字段,TimeH(用于存放6位年月日),TimeL(用于存放6位时分秒),ParamContent(用于存放设备参数)。
存放的规则是每整小时存放一次,此外当参数发生变化时也存放一次(精确到秒)。
所以对我而言,我从库中得到的数据密度并不均匀。而我需要从查询日期0时到24时将数据以分钟为单位(可以忽略秒)组织,然后传递到前台。
我之前的解决思路大体如下
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->// 将得到的日期补全,并且计算出天数,用天数乘以1440*60得到秒数
$dateStart = 20120420; // 查询起始日期
$dateEnd = 20120420; // 查询截至日期
$day=(strtotime($dateEnd)-strtotime($dateStart))/3600/24 + 1; // 计算查询天数
$ltime = date('YmdHis', mktime(0, 0, 0, substr($dateStart, 4, 2), substr($dateStart, 6, 2), substr($dateStart, 0, 4))); // 生成查询起始日期的0点0分
for ($i = 0; $i < 1440*60*$day; $i++) // 通过循环生成以秒为单位作value的数组,然后将其作为secArr数组的value
{
$fullTime[] = $ltime;
$ltime = date('YmdHis', strtotime("$ltime + 1 seconds")); // 时间+1秒
}
$secArr = array_fill_keys($fullTime, "");
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
while($result_va = mysqli_fetch_assoc($query))
{
$temp_data = $result_va['ParamContent'];
$temp_time = $result_va['TimeH'].$result_va['TimeL'];
$secArr[$temp_time] = (float)$temp_data;
if ($cache_d) // 防止复写数组的起始位置
{
$secArr = array_fill($cache_t, (int)$temp_time - $cache_t, $cache_d); // 用前一个有效值填补到当前有效值数组中的空值
}
// 将当前有效值以及时间作为填充值备用
$cache_d = $temp_data;
$cache_t = $temp_time;
}
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号