PHP版本5.4.21
有一个数组(在sql查询之外),如下所示:
Array(
...
[4] => stdClass Object
(
[MakeModel] => Douglas DC-3
[year] => 2011
[month] => 4
[zaehler] => 11
)
[5] => stdClass Object
(
[MakeModel] => Douglas DC-3
[year] => 2012
[month] => 4
[zaehler] => 2
)
[6] => stdClass Object
(
[MakeModel] => Douglas DC-3
[year] => 2013
[month] => 3
[zaehler] => 3
)
...
)
用于javascript图表我需要填写所有缺少的年/月,直到现在为“虚拟对象”。所以看起来应该是这样的:
Array(
[4] => stdClass Object
(
[MakeModel] => Douglas DC-3
[year] => 2011
[month] => 4
[zaehler] => 11
)
[5] => stdClass Object
(
[year] => 2011
[month] => 5
)
[6] => stdClass Object
(
[year] => 2011
[month] => 6
)
...
[7] => stdClass Object
(
[MakeModel] => Douglas DC-3
[year] => 2012
[month] => 4
[zaehler] => 2
)
... until today
)
这是我的第二个时间/日期相关问题。 使用php的日期/时间功能真的很难。 谢谢你的帮助!
答案 0 :(得分:2)
这实际上听起来像是您可能会考虑在数据库中解决的问题。
例如,假设您有一个这样的表格,其中包含您所需范围内的所有月份
month_id year month
1 2011 1
2 2011 2
...
* 20** 12
您修改了包含此类
等飞机信息的表格airplane_id makemodel zaehler month_id
1 Douglas DC-3 11 4
...
然后,您可以进行左连接以获得所有月份以及匹配的飞机列表:
SELECT
m.`year` AS `year`,
m.`month` AS `month`,
a.`makemodel` AS `makemodel`,
a.`zaehler` AS `zaehler`
FROM `months` AS m
LEFT JOIN `airplanes` AS a
ON m.`month_id` = a.`month_id`
ORDER BY `year` ASC, `month` ASC
结果集可能如下所示:
year month makemodel zaehler
2011 1 NULL NULL
2011 2 NULL NULL
2011 3 NULL NULL
2011 4 Douglas DC-3 11
...
具有与时间增量相关的固定ID的表的概念来自维度表的数据仓库概念。您将在大多数数据仓库概念中找到日期维度表(通常具有更精细的日期/时间行值)。
这当然并不意味着这样的表仅在数据仓库应用程序中有用。您在调度应用程序和其他需要“时隙”概念的情况下找到了这种表。