如何按时间将不同查询中的事件分组在一个数组中

时间:2012-05-09 14:32:02

标签: php arrays multidimensional-array

我从数据库中提取了一些与时间相关的注释。

我对多维数组并不太热,但我想在所有事件发生的时候将它们组合在一起。

以下是我的一个问题:

SELECT TIME(date) AS time, followupNote, completed, entityRef
FROM entity_followups
WHERE userRef = ?
AND DAY(date) = ?
AND MONTH(date) = ?
AND YEAR(date) = ?

此示例输出可以是三行,第一列是时间,然后是注释,已完成,然后是entityRef。

我希望任何具有相同时间的行在数组中组合在一起,例如

Array (
    [0] => Array (
        [0] => 12:00:00
        [1] => Array (
            [0] => note
            [1] => completed
            [2] => entityRef
        )
        [2] => Array (
            [0] => note2
            [1] => completed2
            [2] => entityRef2
        )
    )
)

但稍后会有其他查询收集需要添加到顶级数组中的其他类型的事件,如果事件与子数组中的事件具有相同的时间,则需要将其添加到其中。

1 个答案:

答案 0 :(得分:2)

我假设您现有的代码足以获得时间和价值。因此,您将在您选择使用的任何变量或数据结构中包含这些项目。出于本答案的目的,我将假设这些值已存在于各个变量中:$time$value[0]$value[1]$value[2]。此外,我将假设结果正被加载到数组$timesAndValues[]

我认为关键是要在相应的时间内对$timesAndValues[]数组进行索引:

if (isset($timesAndValues[$time]))
{ //The corresponding sub-array already exists, so we just need to load it

  //Push the array of values into the sub-array 
  array_push($timesAndValues[$time], $value);
}
else
{ //The corresponding sub-array does not exist yet, so we need to create it and load it

  //Create the sub-array
  $timesAndValues[$time] = array($time);

  //Push the array of values into the sub-array
  array_push($timesAndValues[$time], $value);
}