【问题标题】:Group array by time interval in PHP在PHP中按时间间隔分组数组
【发布时间】:2017-08-12 07:45:40
【问题描述】:

我有一个这样的数组:

$data = [
 '12:00' => [1,12,31,212],
 '12:30' => [22,1,31,22],
 '12:45' => [22,1,31,22],
 '13:00' => [22,1,31,22],
 '20:00' => [22,1,31,22],
 '20:30' => [22,1,31,22],
];

我希望按时间间隔(以分钟为单位)对其进行分组,所以我需要做一个函数来接受这个数组和给定的时间间隔。

我尝试了类似的方法:

group_by_time_interval($data, $interval // in minutes)

它应该返回另一个这样的数组:

$new_data = group_by_time_interval($data, 45);

$new_data = [
  0 = > [
    '12:00' => [1,12,31,212],
    '12:30' => [22,1,31,22],
    '12:45' => [22,1,31,22],
  ],
  1 => [
    '13:00' => [22,1,31,22]
  ],
  2 => [
   '20:00' => [22,1,31,22],
   '20:30' => [22,1,31,22]
  ]
];

我被这个困住了,我不知道该怎么做,已经尝试了很多事情都没有成功。

【问题讨论】:

  • 你目前的努力是……?
  • 你能提供目前的结果吗?
  • 如果您在一小时内每 5 分钟有一个时间条目,并且想要按 25 分钟分组怎么办?你将如何决定哪个是最好的切割?

标签: php arrays time


【解决方案1】:

您可以遍历数组(必须对键进行排序)并跟踪您添加到子数组的第一个键。每当该键比间隔允许的当前键更远时,创建一个新的子数组,并在其中添加条目:

function group_by_time_interval($data, $interval) {
    $last = null;
    foreach ($data as $key => $value) {
        // Minutes since midnight:
        $minute = (strtotime($key) - strtotime("today")) / 60;
        if ($last === null || $minute - $last > $interval) {
            $result[] = [[$key => $value]];
            $last = $minute; // Remember first key being stored for new period
        } else {
            $result[count($result)-1][] = [$key => $value];
        }
    }
    return $result;
}

查看它在eval.in 上运行。

【讨论】:

    【解决方案2】:

    这是您的解决方案....

    $data = array(
       '12:00' => array(1,12,31,212),
       '12:30' => array(22,1,31,22),
       '12:45' => array(22,1,31,22),
       '13:00' => array(22,1,31,22),
       '20:00' => array(22,1,31,22),
       '20:30' => array(22,1,31,22)
    );
    $new_array = array();
    $new_key_value = 0;$i=-1;
    foreach($data as $key => $row){
         $new_key = explode(':',$key);
         if($new_key_value!=$new_key[0]){$new_key_value=$new_key[0];$i++;}
         $new_array[$i][$key] = $row;
     }
     echo '<pre>';print_r($new_array);
    

    $new_array 包含你想要的数组......

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 2011-02-08
      • 2019-06-28
      • 2018-10-12
      • 2016-09-21
      • 2017-09-06
      • 2021-03-06
      相关资源
      最近更新 更多