PHP Fill Array =>带有空白数据的stdClassObject(年和月)

时间:2013-11-29 20:38:37

标签: php date datetime time

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的日期/时间功能真的很难。 谢谢你的帮助!

1 个答案:

答案 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的表的概念来自维度表的数据仓库概念。您将在大多数数据仓库概念中找到日期维度表(通常具有更精细的日期/时间行值)。

这当然并不意味着这样的表仅在数据仓库应用程序中有用。您在调度应用程序和其他需要“时隙”概念的情况下找到了这种表。