- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
PHP:5.6
MySQL:5.5 (MariaDB)
我从一个管理网站获得以下数据作为数组结构:
[
0 => [
0 => ['factor' => 1.25], // hour from 0:00 to 0:59
1 => ['factor' => 1.25], // hour from 1:00 to 1:59
2 => ['factor' => 1.25], // hour from 2:00 to 2:59
.
.
.
23 => ['factor' => 1.25]
], // monday
1 => [
0 => ['factor' => 1.0], // hour from 0:00 to 0:59
1 => ['factor' => 1.0], // hour from 1:00 to 1:59
2 => ['factor' => 1.0], // hour from 2:00 to 2:59
.
.
.
23 => ['factor' => 1.0]
], // tuesday
.
.
.
6 => [
0 => ['factor' => 1.0], // hour from 0:00 to 0:59
1 => ['factor' => 1.0], // hour from 1:00 to 1:59
2 => ['factor' => 1.0], // hour from 2:00 to 2:59
.
.
.
23 => ['factor' => 1.0]
] // sunday
]
数据表示客户必须为服务支付额外费用(“因素”)的日期和时间。
将此数据插入表格不是问题,它可能类似于下表(其中“#”只是行的数字,“some_fk”是与客户的联系,但与此处无关):
| # | day | hour | factor | some_fk | |----|-----|------|--------|---------| | 1 | 0 | 0 | 1.25 | | |----|-----|------|--------|---------| | 2 | 0 | 1 | 1.25 | | |----|-----|------|--------|---------| | 3 | 0 | 2 | 1.25 | | |----|-----|------|--------|---------| | 4 | 0 | 3 | 1.25 | | |----|-----|------|--------|---------| | 5 | 0 | 4 | 1.25 | | |----|-----|------|--------|---------| | 6 | 0 | 5 | 1.25 | | |----|-----|------|--------|---------| | 7 | 0 | 6 | 1.0 | | |----|-----|------|--------|---------| | 8 | 0 | 7 | 1.0 | | |----|-----|------|--------|---------| | 9 | 0 | 8 | 1.0 | | |----|-----|------|--------|---------| | 10 | 0 | 9 | 1.0 | | . . . |----|-----|------|--------|---------| | 23 | 0 | 22 | 1.0 | | |----|-----|------|--------|---------| | 24 | 0 | 23 | 1.0 | | |----|-----|------|--------|---------| | 25 | 1 | 0 | 1.0 | | |----|-----|------|--------|---------| | 26 | 1 | 1 | 1.5 | | |----|-----|------|--------|---------| | 27 | 1 | 2 | 1.5 | | . . . |----|-----|------|--------|---------| | 37 | 1 | 12 | 1.5 | | |----|-----|------|--------|---------| | 38 | 1 | 13 | 1.5 | | |----|-----|------|--------|---------| | 39 | 1 | 14 | 1.25 | | |----|-----|------|--------|---------| | 40 | 1 | 15 | 1.25 | | |----|-----|------|--------|---------| | 41 | 1 | 16 | 1.25 | | |----|-----|------|--------|---------| | 42 | 1 | 2 | 1.25 | | . . .
这种“管理”形式的插入和检索(数组输入和数组输出)不会经常发生,所以这不是主要问题,但它声称是数据结构。
大多数时候我需要一个时间范围内的数据(只检索,不写入),其中“因素”列表示范围的开始和结束。即(来自上表):
也许获取范围内的数据太具有挑战性(目前我无法想象一种数据格式,以后可以在 PHP 中使用),所以每一行的因子都与前一行不同行,可以做到这一点:
最佳答案
在思考和测试了一些可能的解决方案之后,如果有人遇到类似问题,我将发布我最终解决它的方法:
因为 SQL 解决方案不是那么简单(甚至不可能),所以我考虑了我的第二个问题,结合只在数据库中保存因子随日期和时间的变化。
reduceServiceTimes()
函数的参数是问题中的数组。它返回一个具有以下结构的数组:
[
['day' => 0, 'hour' => 0,'factor' => 1.25],
['day' => 0, 'hour' => 6,'factor' => 1.0],
['day' => 1, 'hour' => 1,'factor' => 1.5],
['day' => 1, 'hour' => 14,'factor' => 1.25],
.
.
.
]
函数 fillServiceTimes()
采用与参数具有相同结构的数组,并返回问题中的数组。
从管理网站获取数据时,我在 PHP 中使用以下函数将完整的数据集缩减为仅“时间”上的变化点:
function reduceServiceTimes($serviceTimes) {
// prepare current factor
$currentFactor = null;
// prepare reduced service times
$reducedServiceTimes = [];
// walk through days
for($day = 0; $day <= 6; $day++) {
// walk through hours
for($hour = 0; $hour <= 23; $hour++) {
// check if first entry
if($day == 0 && $hour == 0) {
// add first entry
$reducedServiceTimes[] = [
'day' => 0,
'hour' => 0,
'factor' => $serviceTimes[0]['hours'][0]['factor']
];
// remember current factor
$currentFactor = $serviceTimes[0]['hours'][0]['factor'];
} else {
// check last factor
if($serviceTimes[$day]['hours'][$hour]['factor'] != $currentFactor) {
// first entry
$reducedServiceTimes[] = [
'day' => $day,
'hour' => $hour,
'factor' => $serviceTimes[$day]['hours'][$hour]['factor']
];
// remember current factor
$currentFactor = $serviceTimes[$day]['hours'][$hour]['factor'];
}
}
}
}
// return
return $reducedServiceTimes;
}
返回的数组可以很容易地插入到我的问题中提到的数据库结构中。
为了为网站取回完全填充的数组,我使用以下函数用相同的因子填充“时间”变化点之间的间隙:
function fillServiceTimes($rows) {
// prepare complete list
$completeServiceTimes = [
0 => [],
1 => [],
2 => [],
3 => [],
4 => [],
5 => [],
6 => [],
];
// walk through rows
for($i = 0; $i < count($rows); $i++) {
// simplify days and hours
$day = $rows[$i]['day'];
$nextDay = ($i == count($rows) - 1 ? 6 : $rows[$i + 1]['day']);
$hour = $rows[$i]['hour'];
$nextHour = ($i == count($rows) - 1 ? 24 : $rows[$i + 1]['hour']);
$value = ['factor' => floatval($rows[$i]['factor'])];
// check if start and end are the same day
if(($day == $nextDay) || ($nextDay == $day + 1 && $nextHour == 0)) {
// check if next hour is 0
if($nextHour == 0) {
$nextHour = 24;
}
$completeServiceTimes[$day] += array_fill($hour, $nextHour - $hour, $value);
} else {
// walk from day to next day
for($currDay = $day; $currDay <= $nextDay; $currDay++) {
// check if first day and no complete day
if($currDay == $day && $hour > 0) {
$completeServiceTimes[$currDay] += array_fill($hour, 24 - $hour, $value);
// check if last day and no complete day
} elseif($currDay == $nextDay && $nextHour <= 23) {
$completeServiceTimes[$currDay] += array_fill(0, $nextHour, $value);
// any other complete day
} else {
$completeServiceTimes[$currDay] += array_fill(0, 24, $value);
}
}
}
}
// return
return $completeServiceTimes;
}
希望这可以帮助其他人......
关于php - 插入数据作为时间点,检索数据作为时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116383/
我不能解决这个问题。和标题说的差不多…… 如果其他两个范围/列中有“否”,我如何获得范围或列的平均值? 换句话说,我想计算 A 列的平均值,并且我有两列询问是/否问题(B 列和 C 列)。我只希望 B
我知道 python 2to3 将所有 xrange 更改为 range 我没有发现任何问题。我的问题是关于它如何将 range(...) 更改为 list(range(...)) :它是愚蠢的,只是
我有一个 Primefaces JSF 项目,并且我的 Bean 注释有以下内容: @Named("reportTabBean") @SessionScoped public class Report
在 rails3 中,我在模型中制作了相同的范围。例如 class Common ?" , at) } end 我想将公共(public)范围拆分为 lib 中的模块。所以我试试这个。 module
我需要在另一个 View 范围 bean 中使用保存在 View 范围 bean 中的一些数据。 @ManagedBean @ViewScoped public class Attivita impl
为什么下面的代码输出4?谁能给我推荐一篇好文章来深入学习 javascript 范围。 这段代码返回4,但我不明白为什么? (function f(){ return f(); functio
我有一个与此结构类似的脚本 $(function(){ var someVariable; function doSomething(){ //here } $('#som
我刚刚开始学习 Jquery,但这些示例对我帮助不大...... 现在,以下代码发生的情况是,我有 4 个表单,我使用每个表单的链接在它们之间进行切换。但我不知道如何在第一个函数中获取变量“postO
为什么当我这样做时: function Dog(){ this.firstName = 'scrappy'; } Dog.firstName 未定义? 但是我可以这样做: Dog.firstNa
我想打印文本文件 text.txt 的选定部分,其中包含: tickme 1.1(no.3) lesson1-bases lesson2-advancedfurther para:using the
我正在编写一些 JavaScript 代码。我对这个关键字有点困惑。如何在 dataReceivedHandler 函数中访问 logger 变量? MyClass: { logger: nu
我有这个代码: Public Sub test() Dim Tgt As Range Set Tgt = Range("A1") End Sub 我想更改当前为“A1”的 Tgt 的引
我正忙于此工作,以为我会把它放在我们那里。 该数字必须是最多3个单位和最多5个小数位的数字,等等。 有效的 999.99999 99.9 9 0.99999 0 无效的 -0.1 999.123456
覆盖代码时: @Override public void open(ExecutionContext executionContext) { super.open(executio
我想使用 preg_match 来匹配数字 1 - 21。我如何使用 preg_match 来做到这一点?如果数字大于 21,我不想匹配任何东西。 example preg_match('([0-9]
根据docs range函数有四种形式: (range) 0 - 无穷大 (range end) 0 - 结束 (range start end)开始 - 结束 (range start end st
我知道有一个UISlider,但是有人已经制作了RangeSlider(用两个拇指吗?)或者知道如何扩展 uislider? 最佳答案 我认为你不能直接扩展 UISlider,你可能需要扩展 UICo
我正在尝试将范围转换为列表。 nums = [] for x in range (9000, 9004): nums.append(x) print nums 输出 [9000] [9
请注意:此问题是由于在运行我的修饰方法时使用了GraphQL解析器。这意味着this的范围为undefined。但是,该问题的基础知识对于装饰者遇到问题的任何人都是有用的。 这是我想使用的基本装饰器(
我正在尝试创建一个工具来从网页上抓取信息(是的,我有权限)。 到目前为止,我一直在使用 Node.js 结合 requests 和 Cheerio 来拉取页面,然后根据 CSS 选择器查找信息。我已经
我是一名优秀的程序员,十分优秀!