PHP 組織密度に関する一貫性のないデータに関する一連の問題について
私には能力が限られており、小さなプロジェクトに取り組んでいるときに問題が発生しました。お役に立てれば幸いです。
データベース cfg_hisdata テーブルは、デバイスの収集された履歴パラメータ情報を保存するために使用されます。TimeH (6 桁の年、月、日の保存に使用)、TimeL (6 桁の年、月、日の保存に使用) の 3 つのキー フィールドがあります。 -数字の時、分、秒)、ParamContent(デバイスパラメータの保存に使用)。
保存ルールは、1 時間ごとに保存することと、パラメーターが変更されたときにも保存することです (秒まで正確)。
つまり、私にとって、ライブラリから取得するデータ密度は均一ではありません。そして、クエリ日付 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; }