首页 > 编程语言 >php合并时间区间

php合并时间区间

时间:2024-05-02 11:22:05浏览次数:25  
标签:合并 cross item range && time 区间 php row

需要写一段合并时间区间的代码,写个demo记录下

<?php
$arr = [
  ["2024-04-16 11:25:46", "2024-04-16 12:19:21"],
  ["2024-04-16 03:14:06", "2024-04-16 10:13:21"],
  ["2024-04-16 13:14:59", "2024-04-16 15:44:46"],
  ["2024-04-16 12:19:21", "2024-04-16 13:58:30"],
  ["2024-04-16 13:58:30", "2024-04-16 15:08:37"],
  ["2024-04-16 04:33:52", "2024-04-16 10:12:47"],
  ["2024-04-16 03:44:18", "2024-04-16 10:44:23"]
];


function handleTimeRange($arr)
{
  usort($arr, function ($a, $b) {
    return strtotime($a[0]) - strtotime($b[0]);
  });

  $time_range = [];
  foreach ($arr as $row) {
    $flag_cross = false;
    foreach ($time_range  as $i => $item) {
      if ($row[0] < $item[0] && $row[1] >= $item[0] && $row[1] <= $item[1]) {
        $flag_cross = true;
        $time_range[$i][0] = $row[0];
      } else if ($row[0] >= $item[0] && $row[0] <= $item[1] && $row[1] > $item[1]) {
        $flag_cross = true;
        $time_range[$i][1] = $row[1];
      } else if ($row[0] < $item[0] && $row[1] > $item[1]) {
        $flag_cross = true;
        $time_range[$i][0] = $row[0];
        $time_range[$i][1] = $row[1];
      } else if ($row[0] > $item[0] && $row[1] < $item[1]) {
        $flag_cross = true;
      }
    }
    if (empty($time_range)) $time_range[] = $row;
    if (!$flag_cross && !in_array($row, $time_range)) $time_range[] = $row;
  }
  return $time_range;
}

echo '<pre>';
$tr = handleTimeRange($arr);
var_dump($tr);

先将数组中元素按照起始时间排序,再遍历数组判断时间区间之间是否有重合的部分,如有则合并时间区间,如没有则将新的时间区间放入

标签:合并,cross,item,range,&&,time,区间,php,row
From: https://www.cnblogs.com/caroline2016/p/18170037

相关文章

  • php反序列化gc
    通过一道题来边看边讲php中的zval容器和gc回收机制ezpop<?phperror_reporting(0);highlight_file(__FILE__);classAAA{public$s;public$a;publicfunction__toString(){echo"youget2A<br>";$p=$this->a;r......
  • 2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一
    2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2,分别移除它们各自的一半元素,将剩下的元素合并成集合s。找出集合s中可能包含的最多元素数量。输入:nums1=[1,2,3,4,5,6],nums2=[2,3,2,3,2,3]。输出:5。答案2024-05-01:chatgpt题目来自leetcode3002。大体......
  • 基于Hyperf的CMS,企业官网通用php-swoole后台管理系统
    2023年9月11日10:47:00仓库地址:https://gitee.com/open-php/zx-hyperf-cmsCMS,企业官网通用PHP后台管理系统框架介绍hyperfSCUI后端开发组件php8.1hyperf3.1数据库sql(使用最新日期文件)hyperf\doc\sql_bakmysql8.系统默认账号密码:admin/admin前端开发组件scui......
  • 异或与区间加题解
    异或与区间加题解简要题意给定\(n,m,K,a_{1...n}\),和\(m\)个三元组\((x_i,y_i,z_i)\),定义\(calc(l,r)=a_l\bigoplusa_{l+1}\bigoplus...\bigoplusa_r\)。对于每个三元组\((x,y,z)\),对所有满足\(x\lel\ler\ley\,\calc(l,r)=K\)的区间\((l,r)\)内的每个数\(b......
  • 数据结构--线段树合并
    线段树合并前置知识权值线段树,动态开点线段树简单说明一下,权值线段树就是以值域开的一棵线段树,而动态开点就是因为值域过大导致线段树开不下,于是开一棵残疾的线段树。线段树合并模板例:给定两个数列\(a,b\),求\(\suma_i+b_i\)当然我只是为了引出模板。代码(\(x\)表......
  • PHP框架Laravel+Vue3+前后端分离开发模式+实战项目
    1、本实战项目采用前后端分离的开发模式,前端框架vue3,后端框架laravel10。所谓的前后端分离的开发,就是有别于利用cookie,session的基于会话机制的开发模式;前后端分离的开发模式是基于jwt的开发模式,也就是说后端的接口数据不仅可以支持web页面,也可以支持微信小程序,公众号,app等移动端......
  • PHP mysql 大量批量insert或update数据出错问题
    UPDATEusersSETage=30WHEREname='Alice';UPDATEusersSETage=25WHEREname='Bob';UPDATEusersSETage=35WHEREname='Charlie';以上代码会导致并发性问题,因为多个更新语句可能会同时执行,导致数据错乱。解决办法:1、使用锁定LOCKTABLESusersWRIT......
  • 开发文档、PHP身份核验接口,三要素实名认证接口
    在这个数字时代,每一步的安全都至关重要。想象一下,一个简单、高效又安全的解决方案,让您的业务与客户之间建立起坚不可摧的信任桥梁,那便是翔云身份证三要素实名认证接口。翔云身份证实名认证接口,实时联网,可瞬间完成姓名、身份证号与人像的三重核验。安全,从未如此便捷。在虚......
  • PHP 使用CURL库IP欺骗,隐藏真实客户端IP
    首先搭建环境,建立个ip.php.代码如下:<?error_reporting(0);functionGetIP(){if($_SERVER['HTTP_CLIENT_IP']){$onlineip=$_SERVER['HTTP_CLIENT_IP'];}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){$onlineip=$_SERVER['HTTP_X_......
  • php 开发规范
    ===========================框架=========================·使用laravel框架,原因:tp的框架路由和orm没有laravel好用· 使用强制路由,方便接口多时,分多版本,分文件夹等操作 ===========================接口=========================· 接口开发注意字段类型,字段是int,查......