每小时组合PHP数组(unix)

时间:2018-02-12 20:55:57

标签: php arrays

我有一个PHP数组,它有一堆来自最近24小时记录的时间戳:

array(402) {
  [0]=>
  int(1518465028)
  [1]=>
  int(1518465031)
  [2]=>
  int(1518465033)
  [3]=>
  int(1518465044)
  [4]=>
  int(1518465082)
  [5]=>
  int(1518465096)
  [6]=>
  int(1518465113)

我希望这些时间戳按小时分组,所以我得到一个这样的数组:

['0:00'] => 5 //meaning there were 5 timestamps between 0 am and 0:59:59 am
['1:00'] => 7 //7 between 1 am and 1:59:59 am

每小时都应该在数组中。如果在这个小时内没有任何时间戳,那么它应该得到一个值0。

我想在PHP中这样做,因为我无法访问MySQL本身。 谁知道怎么做?

编辑(问题被标记为重复):我认为这个问题与重复中提到的问题不同,因为我无法访问MySQL查询和时间格式是Unix。至少我在PHP方面不够熟练,无法使用上面提到的副本。

1 个答案:

答案 0 :(得分:0)

我能想到两种方式;格式为每个时间戳的值hour:00并计算它们:

$result = array_count_values(
          array_map(function($v) { return date('G:00', $v); }, $array));

或者循环并添加索引hour:00并为每个找到的值增加:

foreach($array as $value) {
    $hr = date('G:00', $value);
    $result[$hr] = isset($result[$hr]) ? ++$result[$hr] : 1;
}

如果需要,您可以先sortksort之后。